我正在将ajax连接到wcf服务。但不要让方法得到。已经调试好几天了。我得不到它。 我只是测试默认的GetData(int值)方法。
的Ajax:
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$.ajax({
type: "POST",
url: "http://localhost:19478/Service1.svc/GetData",
data: JSON.stringify({"value": "test"}),
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: function (msg) {
alert(msg);
},
error: function (msg) {
alert("Failed");
}
});
function OnSuccessCall(response) {
alert(response);
}
function OnErrorCall(response) {
alert(response.status + " " + response.statusText);
}
</script>
的web.config:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<services>
<service name="WcfServiceTest.Service1" behaviorConfiguration="myServiceBehavior">
<endpoint name="webHttpBinding"
address="" binding="webHttpBinding"
contract="WcfServiceTest.IService1"
behaviorConfiguration="webHttp"
>
</endpoint>
<endpoint name="mexHttpBinding"
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="myServiceBehavior" >
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
<behavior name="NewBehavior0">
<webHttp helpEnabled="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
Iservice1:
[OperationContract]
[WebInvoke(Method="POST",
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json)]
string GetData(String value);
服务1:
public string GetData(String value)
{
return string.Format("You entered: {0}", value);
}
public class Service1 : IService1
以上没有任何内容。
[ServiceContract]
以上public interface IService1
。
我添加了很多东西,删除了很多东西..我不知道了。 我怀疑它是我的web.config文件,我没有得到那个部分
答案 0 :(得分:3)
您的操作合同表明它是一种发布方法,但您要求JSONP
仅支持Get
次请求。如果它不是跨域请求,则不需要使用JSONP,只需将方法设置为Post
作为您的请求,并删除类型,您的响应格式也不是JSON对象也会更改它,因此您需要通过更改合同或更改方法中的返回数据,然后它应该工作。
编辑提交:
首先,JSONP不是实际的xmlhttprequest对象请求。它正在做的是为您的页面添加一个脚本标记,该标记具有您的回调函数,请求数据作为参数。它主要针对跨域数据共享。 JSONP请求返回类似下面的内容
请求网址:domain.com/getJsonp?callback=processJSONP
返回;
processJSONP( {
resultList: [{data: "hello"},
{data: "world"}
// and lost of data you need.
]
});
注意processJSONP这是你的页面或库中的功能,并做你想做的事。
function processJSONP(jsonpResult) {
for(var key in jsonpResult.resultList)
{
//process the data
}
}
如果您肯定需要使用POST获取数据,则它不能是JSONP。它必须是一个AJAX请求,并且也在同一个域中。在这种情况下,您可以在AJAX请求的成功函数中处理数据。
答案 1 :(得分:0)
好的,2天后,我已经修好了。
这是我的步骤,感谢所有贡献的人。
在我的IService界面中,我将其添加到我的webinvoke:
BodyStyle = WebMessageBodyStyle.WrappedRequest
将数据类型从jsonp更改为json,jsonp仅支持GET(感谢Onur TOPAL)。
将我的ajax / json文件放在我的visual studio项目文件夹中。这将使它在IIS服务器上运行。