2015-11-13 6 views
0

мое обслуживание было определено:ФОС Restful Сервис предоставляет метод Не допускается или Bad Request

[ServiceContract(ProtectionLevel = ProtectionLevel.None)] 
[XmlSerializerFormat] 
public interface IMSMService 
{ 

    [OperationContract(IsOneWay = false)] 
    [WebInvoke(Method = "POST", UriTemplate = "GetProducts", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)] 
    ProductsResponse GetProducts(ProductsRequest request); 

} 

и заголовок метода имеет вид:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class MSMService : IMSMService 
{..... 

я запустить службу, а затем в клиенте app Я делаю ссылку на службу к процессу wcf. В моем тестовом проекте для клиента у меня есть следующий тест.

[Test] 
    public void CallWCFRestful() 
    { 
     XmlSerializer xmlSerializer = new XmlSerializer(typeof(ProductsRequest)); 

     MemoryStream stream = new MemoryStream(); 

     xmlSerializer.Serialize(stream,_productsRequest); 

     string data = Encoding.UTF8.GetString(stream.ToArray(), 0, (int)stream.Length); 
     string link = "http://localhost/WcfService/GetProducts"; 
     var request = (HttpWebRequest)WebRequest.Create(new Uri(link)); 

     request.ContentType = "application/soap+xml; charset=utf-8"; 
     request.Method = "POST"; 
     request.ContentLength = data.Length; 
     request.KeepAlive = true; 

     using (var requestStream = request.GetRequestStream()) 
     { 

      var writer = new StreamWriter(requestStream); 

      writer.Write(data); 

      writer.Flush(); 

     } 

     using (HttpWebResponse resp = request.GetResponse() as HttpWebResponse) 
     { 

      using (var responseStream = resp.GetResponseStream()) 
      { 

       var reader = new StreamReader(responseStream); 

       var result = reader.ReadToEnd(); 

      } 

     } 
    } 

В коде, когда у меня работает служба, возникают ошибки при попытке установить «resp» с ошибкой неправильного запроса. Если я сделаю ctrl + щелчок на http://localhost/WcfService, тогда это покажет, что запущенная служба. Если я включу метод в соответствии со своей строкой кода, тогда я получаю метод не допустимым (я ожидал бы этого, потому что я не передаю объект). Что я сделал не так.

+0

ссылка действительна. Я имею в виду конечную точку обслуживания? –

ответ

0

Поскольку это служба WCF REST, тип содержимого не может быть SOAP. Это должно быть application/xml. Повторите попытку изменения типа контента и тестирования. Это может быть причиной = или, по крайней мере, одной из причин.

Изменить следующим образом:

request.ContentType = "application/xml; charset=utf-8";