Я новичок в использовании служб WCF, и я надеюсь, что вы сможете помочь мне в решении некоторых проблем, связанных с внешним веб-сервисом REST. Я создал два приложения, чтобы попробовать и проверить мой сервис.Как настроить службы WCF
- Console приложение, чтобы проверить мой класс Lib
- An Umbraco приложение, которое хозяйничает свои услуги
И локальный.
Вот код моей службы:
namespace HorecaWebservices.Webservices
{
[ServiceContract]
public interface IWS_Test
{
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
Agenda GetAgenda(String mobileAppKey);
}
}
namespace HorecaWebservices.Webservices
{
public class WS_Test : IWS_Test
{
public Agenda GetAgenda(String mobileAppKey)
{
return BL_Agenda.GetAgenda(mobileAppKey);
}
}
}
Web конфигурация моей службы:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true"
automaticFormatSelectionEnabled="true"
defaultOutgoingResponseFormat="Json">
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>
<services>
<service name="HorecaWebservices.Webservices.WS_Test"
behaviorConfiguration="MyServiceTypeBehaviors">
<endpoint address="" binding="wsHttpBinding"
contract="HorecaWebservices.Webservices.IWS_Test"/>
<endpoint contract="IMetadataExchange"
binding="mexHttpBinding" address="mex"/>
</service>
</services>
</system.serviceModel>
Вот код из моего консольного приложения, который вызывает метод службы:
public static class BL_Agenda
{
public static Agenda GetAgenda()
{
Agenda agenda = new Agenda();
WebRequest request = WebRequest.Create("http://localhost:63462/Webservices/WS_Test.svc/GetAgenda");
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
string postData = "{\"mobileAppKey\":\"HEMDZ\"}"; //encode your data
using (Stream s = request.GetRequestStream())
{
using (StreamWriter sw = new StreamWriter(s))
sw.Write(postData);
s.Close();
}
try
{
using (Stream s = request.GetResponse().GetResponseStream())
{
using (StreamReader sr = new StreamReader(s))
{
var jsonData = sr.ReadToEnd();
agenda = JsonConvert.DeserializeObject<Agenda>(jsonData);
}
s.Close();
}
}
catch (WebException e)
{
agenda = null;
WebExceptionStatus status = e.Status;
Console.WriteLine(status.ToString());
}
return agenda;
}
Теперь, когда я запускаю этот код, request.GetResponse() выдает System.Net.WebException "(415) C annot обрабатывает сообщение, потому что тип контента «application/json; charset = utf-8 'не был ожидаемым типом' application/soap + xml; кодировка = UTF-8»
Через пару часов, пытаясь выяснить, что проблема в том, я до сих пор не могу понять его .. Может кто-то помочь мне в этом?
Вы указали свою ** услугу ** в 'web.config' для использования' WsHttpBinding', которая является привязкой ** SOAP ** на основе XML, а не связью ** REST ** на основе JSON вы, кажется, ожидаете на стороне клиента. Для REST используйте 'webHttpBinding' на стороне сервера вместо –