我已经搜寻了几个小时并尝试了不同的方法来使它工作。我已经看了很多stackoverflow上的文章,但我要么太蠢了无法让它正常工作,要么我的配置有一些独特和奇怪的问题阻止了我体验乐趣。
我按照这个教程创建了WCF服务:
http://www.codeproject.com/Articles/97204/Implementing-a-Basic-Hello-World-WCF-Service
这是一个非常基础的服务,只有一个方法,我只想使用json来消费它的jQuery.AJAX()。
我将它托管在IIS中,并且它可以工作。我可以无问题地访问WSDL。
我尝试使用以下代码来消费它:
$.ajax({
dataType: 'json',
type: 'POST',
contentType: "application/json",
url: "//localhost:546/HelloWorldService.svc/GetMessage",
data: {
name: "Joe"
}
}).done(function(msg){
console.log(msg);
$("#result").append(msg);
});
我总是遇到错误。根据我尝试过的,我得到了500个错误、402个错误和有关不正确内容的错误…所有的错误。
我已经尝试了以下文章中提供的解决方案。这些方案从让我更改web.config端点(我知道我必须更改它们,但迄今为止我尝试的所有方法都无法添加JSON端点)到添加像...这样的内容。
[WebInvoke(Method = "POST", UriTemplate = "json/PostSalesOrderData", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
到接口。
以下是我查阅的一些文章,我试图将它们融入我的解决方案中,但并没有太大的成功。
Javascript JSON和Phonegap Android上的WCF Web服务
HTTP/1.1 415无法处理消息,因为内容类型“application/json; charset=utf-8”不是预期的类型“text/xml; charset=utf-8”
我还查看了这个教程,并尝试使用他的建议来使我的解决方案工作。但仍然没有任何进展!
http://www.primordialcode.com/blog/post/passing-json-serialized-objects-wcf-service-jquery
这是我的接口的样子。
[ServiceContract]
public interface IHelloWorldService
{
[OperationContract]
[WebInvoke(UriTemplate = "GetMessage", Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
String GetMessage(String name);
}
有人能帮助我体验喜悦吗?
非常感谢您查看我的问题。如果您需要更多信息或我没有提供足够的信息,请让我知道,以便我帮助您帮助我!
我一定缺少了什么愚蠢的东西……我知道这并不难。
编辑:
可用的Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="false" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="WebHTTPEndpointBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="MyWebServiceBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"/>
</webHttpBinding>
</bindings>
<services>
<service name="MyWCFServices.HelloWorldService"
behaviorConfiguration="MyServiceTypeBehaviors">
<endpoint address="" binding="webHttpBinding" bindingConfiguration="MyWebServiceBinding" behaviorConfiguration="WebHTTPEndpointBehavior"
contract="MyWCFServices.IHelloWorldService"/>
<endpoint contract="IMetadataExchange"
binding="mexHttpBinding" address="mex"/>
</service>
</services>
</system.serviceModel>
</configuration>