2013-04-04 4 views
3

Я создал службу WCF, используя следующий шаблон:отладки asp.net WCF служба, размещенная в IIS

http://visualstudiogallery.msdn.microsoft.com/fbc7e5c1-a0d2-41bd-9d7b-e54c845394cd

Эта услуга имеет метод, как это:

[ServiceContract] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]  
    public class RecordingCompleted 
    { 

     [WebInvoke(UriTemplate = "", Method = "POST")] 
     public string ProcessCall(string JsonData) 
     { 

     } 

    } 

Я принимал это услуга по IIS и URL-адресу метода:

http: // [local] host/Уведомления/записьКомпьютерный/

Когда я печатаю этот адрес в адресной строке, я получаю:

Method not allowed. Please see the service help page for constructing valid requests to the service. 

Я пытаюсь потреблять этот веб-сервис, используя следующий код:

строку serviceBaseUrl = «HTTP: // [местный] хост/Уведомления/RecordingCompleted/";

 string resourceUrl = ""; 
     string method = "POST"; 
     //string jsonText = "}"; 
     UseHttpWebApproach(serviceBaseUrl, resourceUrl, method, jsonText); 

и методы:

private string UseHttpWebApproach(string serviceUrl, string resourceUrl, string method, string requestBody) 
     { 
      string responseMessage = null; 
      var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest; 
      if (request != null) 
      { 
       request.ContentType = "application/json"; 
       request.Method = method;     
      } 

      //var objContent = HttpContentExtensions.CreateDataContract(requestBody); 
      if (method == "POST" && requestBody != null) 
      { 
       byte[] requestBodyBytes = ToByteArrayUsingJsonContractSer(requestBody); 
       request.ContentLength = requestBodyBytes.Length; 
       using (Stream postStream = request.GetRequestStream()) 
        postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length); 

      } 

      if (request != null) 
      { 
       var response = request.GetResponse() as HttpWebResponse; 
       if (response.StatusCode == HttpStatusCode.OK) 
       { 
        Stream responseStream = response.GetResponseStream(); 
        if (responseStream != null) 
        { 
         var reader = new StreamReader(responseStream); 

         responseMessage = reader.ReadToEnd(); 
        } 
       } 
       else 
       { 
        responseMessage = response.StatusDescription; 
       } 
      } 
      return responseMessage; 
     } 



private static byte[] ToByteArrayUsingJsonContractSer(string requestBody) 
    { 
     byte[] bytes = null; 
     var serializer1 = new DataContractJsonSerializer(typeof(string)); 
     var ms1 = new MemoryStream(); 
     serializer1.WriteObject(ms1, requestBody); 
     ms1.Position = 0; 
     var reader = new StreamReader(ms1); 
     bytes = ms1.ToArray(); 
     return bytes; 
    } 

Я пытаюсь отлаживать метод сервиса, но я не знаю, как это сделать. Пожалуйста, предложите мне, почему я получаю сообщение об ошибке при вводе http: // [local] host/Notifications/RecordingCompleted/в адресной строке. И как отладить службу, размещенную на локальном хосте?

С уважением, Азиф Хамид

+0

Почему вы используете 'http: // [local] host /' вместо 'http: // localhost /'? Попробуйте исправить ваш serviceBaseUrl. –

+0

Это только потому, что в Stackoverflow мы не можем ввести locahost. – DotnetSparrow

ответ

10

Перед отладки вам придется развернуть DLL и PDB в каталог IIS. Затем в отладке VS нажмите «Отладка» -> «Прикрепить к процессу». «Убедитесь, что вы проверили« Показать процесс от всех пользователей »и« Показать процесс во всех сеансах », теперь вы должны увидеть процесс W3WP в своем списке доступных процессов. Выберите W3WP и нажмите «Прикрепить». VS attach screenshot

Теперь вы должны иметь возможность отлаживать службу WCF. пожалуйста, обратитесь к следующим блогам для получения дополнительной отладки советы

http://dhawalk.blogspot.com/2007/07/debugging-tips-in-c.html http://anilsharmadhanbad.blogspot.com/2009/07/debugging-wcf-service-hosted-in-local.html

1

«Метод не допускается» Ошибка при попытке перейти к URL ФОС может происходить по разным причинам:

1) Версия ASP.NET не настроена корректно с IIS (повторно запустить приложение aspnet_regiis.exe для соответствующей версии .NET)

2) .svc-файлы не отображаются для использования aspnet_isapi.dll (еще раз, re -run aspnet_regiis.exe)

3) IIS был установлен после рамки WCF: для этого вам нужно запустить это приложение, где «xx» - это версия курса: «% WINDIR% \ Microsoft.Net \ Framework \ xx \ Windows Communication Foundation \ ServiceModelReg.exe "-r

Посмотрите на this article для дальнейшего изучения проблем конфигурации IIS/ASP.NET ...

Однако, я нашел обычный Причина, по которой «метод не разрешен» является ошибкой, которую я сделал в web.config: что-то такое же простое, как опечатка в информации привязки, вызовет это. Посмотрите на свой web.config и убедитесь, что URL-адреса верны.

Если вы исчерпали все эти возможности и по-прежнему получаете «метод не допускается», попробуйте Service Trace Viewer Tool, он может предоставить дополнительную информацию о том, что происходит не так.

Смежные вопросы