0
我有一個WCF服務與三個端點具有不同的綁定(basicHttpBinding爲肥皂客戶端,webHttpBinding爲jQuery ajax客戶端和mex)。使用JQuery AJAX調用WCF服務與多個綁定
我可以(通過添加服務參考當時的)通過SOAP訪問服務:
ServiceRef.IService service = new ServiceClient("BasicHttpBinding_IService");
Response.Write(service.TestMethod("hi"));
但爲什麼我從jQuery的AJAX調用我得到一個404錯誤。
如果我將服務複製到一個測試項目中並只定義一個webHttpBinding,我可以通過jquery調用該服務。
IService.cs
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json)]
Response TestMethod(string Id);
....
Service.cs
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior]
public class Service : IService
{
[OperationBehavior]
public Response TestMethod(string Id)
{
Response resp = new Response();
resp.Message = "hello";
return resp;
}
....
的Web.Config
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" aspNetCompatibilityEnabled="true" />
<services>
<service
name="eBooks.Presentation.Wcf.Service"
behaviorConfiguration="eBooks.Presentation.Wcf.ServiceBehavior">
<!-- use base address provided by host -->
<!-- specify BasicHttp binding and a binding configuration to use -->
<endpoint address="soap"
binding="basicHttpBinding"
bindingConfiguration="Binding1"
contract="eBooks.Presentation.Wcf.IService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<endpoint address="" binding="webHttpBinding"
contract="eBooks.Presentation.Wcf.IService" behaviorConfiguration="EndpBehavior"/>
</service>
</services>
<bindings>
<!--
Following is the expanded configuration section for a BasicHttpBinding.
Each property is configured with the default value.
See the TransportSecurity, and MessageSecurity samples in the
Basic directory to learn how to configure these features.
-->
<basicHttpBinding>
<binding name="Binding1"
hostNameComparisonMode="StrongWildcard"
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
openTimeout="00:10:00"
closeTimeout="00:10:00"
maxReceivedMessageSize="65536"
maxBufferSize="65536"
maxBufferPoolSize="524288"
transferMode="Buffered"
messageEncoding="Text"
textEncoding="utf-8"
bypassProxyOnLocal="false"
useDefaultWebProxy="true" >
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="eBooks.Presentation.Wcf.ServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="EndpBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
jQuery的
function CallService() {
$.ajax({
type: "POST", //GET or POST or PUT or DELETE verb
url: "http://localhost:888/Service.svc/TestMethod", // Location of the service
data: '{"Id": "1"}', //Data sent to server
contentType: "application/json; charset=utf-8", // content type sent to server
dataType: "json", //Expected data format from server
processdata: ProcessData, //True or False
success: function (msg) {//On Successfull service call
ServiceSucceeded(msg);
},
error: ServiceFailed// When Service call fails
});
}
在我所設定的地址webHttp端點是「」因爲我不知道如何從jQuery的調用時選擇特定端點我的端點配置。
任何人有任何想法,爲什麼我得到這個404錯誤?
是的,[WebInvoke]可能不需要。但值得一試。 – Richard