带有 WCF 调用的 Ajax 返回 404 错误
本文关键字:返回 错误 Ajax WCF 调用 带有 | 更新日期: 2023-09-27 18:34:36
我想使用 Ajax 调用调用 WCF 服务,但它返回了 404 错误"未找到错误
">可通过浏览器访问 url,并且端口 1506 已打开
这是我的阿贾克斯电话:我想使用开机自检类型
$.ajax(
{
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "http://192.168.80.18:1506/Service1.svc/GetData",
type: 'POST',
success: function (data, status, xhr)
{
alert('Success: '+data);
},
error: function(x, e)
{
if (x.status == 0) {
alert('You are offline!!'n Please Check Your Network.');
} else if (x.status == 404) {
// Here is the problem
alert('Requested URL not found.');
} else if (x.status == 500) {
alert('Internal Server Error.');
} else if (e == 'parsererror') {
alert('Error.'nParsing JSON Request failed.');
} else if (e == 'timeout') {
alert('Request Time out.');
} else {
alert('Unknow Error.'n' + x.responseText);
}
}
});
周转基金侧
IService1.cs在这里,我补充说,POST 方法 [服务合同] 公共接口 IService1 {
[OperationContract]
[WebInvoke(Method= "POST", ResponseFormat= WebMessageFormat.Json)]
string GetData();
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: ajoutez vos opérations de service ici
}
服务1.svc
public class Service1 : IService1
{
public string GetData()
{
return "Hello world!";
}
}
网络.config
<?xml version="1.0" encoding="utf-8"?>
<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>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- Pour éviter la divulgation d'informations de métadonnées, définissez les valeurs ci-dessous sur false avant le déploiement -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- Pour recevoir les détails de l'exception dans les erreurs à des fins de débogage, définissez la valeur ci-dessous sur true. Pour éviter la divulgation d'informations d'exception, définissez-la sur false avant le déploiement -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WcfService1.Service1">
<endpoint address="Service1.svc"
binding="basicHttpBinding"
contract="WcfService1.IService1" />
</service>
</services>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
Pour parcourir le répertoire racine de l'application Web lors du débogage, définissez la valeur ci-dessous sur true.
Définissez-la sur false avant le déploiement pour ne pas divulguer d'informations du dossier de l'application Web.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
使用工具进行一些测试以验证您的问题。我通常使用邮递员。它允许您构造 POST 消息并针对您的端点对其进行测试,这是确定问题实际原因的最佳方式。
我找到了一个解决方案,现在它可以工作了在这种情况下,不要忘记将端口 3070 放入防火墙设置
如果要从另一台计算机访问服务,可以更改应用程序主机.xml文件
IService1.cs在这里,我添加了 ResponseFormat (JSON(、RequestFormat (JSON(、UriTemplate 以通过 url 访问我的函数:http://192.168.80.18:3070/Service1.svc/GetData
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json,UriTemplate="/getdata")]
string GetData();
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
服务1.svc.cs此处没有变化
public class Service1 : IService1
{
public string GetData()
{
return "It works";
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite == null)
{
throw new ArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
网络.config在这里,我添加了带有端点行为的服务标签,以在内部添加 webHttp 标签
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" maxUrlLength="500"/>
</system.web>
<system.serviceModel>
<services>
<service name="WcfService2.Service1">
<!-- Service Endpoints -->
<endpoint address="" binding="webHttpBinding" contract="WcfService2.IService1" behaviorConfiguration="webBehavior">
</endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<!-- Pour éviter la divulgation d'informations de métadonnées, définissez les valeurs ci-dessous sur false avant le déploiement -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- Pour recevoir les détails de l'exception dans les erreurs à des fins de débogage, définissez la valeur ci-dessous sur true. Pour éviter la divulgation d'informations d'exception, définissez-la sur false avant le déploiement -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
Pour parcourir le répertoire racine de l'application Web lors du débogage, définissez la valeur ci-dessous sur true.
Définissez-la sur false avant le déploiement pour ne pas divulguer d'informations du dossier de l'application Web.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
阿贾克斯方面这里没有重大变化
$.ajax(
{
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "http://192.168.80.18:3070/Service1.svc/GetData",
type: 'GET',
data: "{}",
success: function (data, status, xhr)
{
alert('Success: '+data);
},
error: function(x, e)
{
if (x.status == 0) {
alert('You are offline!!'n Please Check Your Network.');
} else if (x.status == 404) {
alert('Requested URL not found.');
} else if (x.status == 500) {
alert('Internal Server Error.');
} else if (e == 'parsererror') {
alert('Error.'nParsing JSON Request failed.');
} else if (e == 'timeout') {
alert('Request Time out.');
} else {
alert('Unknow Error.'n' + x.responseText);
}
}
});