Restful WCF 无法到达操作合同
Restful WCF can't reach operationcontract
我创建了一个 RESFTful WCF Web 服务,并将其作为新的 Web 应用程序安装在 IIS 中。 WCF 有一些操作,例如:Login、getEmployees ...等。当我从 vs 发布和 运行 它时它工作正常,所以我可以从浏览器链接到达:
http://myserver/service.svc
http://myserver/service.svc?wsdl
http://myserver/Login?user=sample&password=paswd
http://myserver/getEmployees?name=dada
通过操作链接,我得到了确切需要的数据作为响应。
然而它仅在我 运行 来自 vs 的 Web 服务时有效,但是当我尝试从浏览器访问链接并且 Web 服务不是 运行ning 在 VS 中我只能访问链接如:
http://myserver/service.svc
http://myserver/service.svc?wsdl
但不是像这样的操作链接:
http://myserver/Login?user=sample&password=paswd
http://myserver/getEmployees?name=dada
端点配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings/>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service name="AXPAYROLL.PayrollActions" behaviorConfiguration="serviceBehavior">
<endpoint address="http://myserver/" behaviorConfiguration="RESTFriendly" binding="webHttpBinding" contract="AXPAYROLL.IPayrollActions">
<identity>
<dns value="myserver" />
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://myserver/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RESTFriendly">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<!-- To avoid disclosing metadata information,
set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="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" />
<serviceAuthorization serviceAuthorizationManagerType="AXPAYROLL.DataContractLayer.DistributorValidator, AXPAYROLL" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
我还创建了一个控制台主机应用程序,其中一切都像 vs 一样工作正常,所以 IIS 中的问题肯定可能出在权限中...
我是 WCF 的新手,但我认为这不是 运行 与始终部署 wcf 的正确方法!!!我还想在没有安装 vs 的生产服务器上安装 wcf,我知道可以通过控制台应用程序实现自我托管,但这又不是我想要的,我希望它 运行 超过正常iis,知道是什么问题吗?我错过了什么吗?
当IIS上的WCF服务时,<baseAddresses>
中指定的任何基地址都将被忽略,基地址将是.svc文件中的URL。
端点元素中的 address
属性是一个相对地址,可能类似于 address="rest"
.
所以在 IIS 中,url 将是 http://myserver/service.svc/rest/getEmployees?name=dada
更新:
要删除 svc 扩展,请查看 this question
我创建了一个 RESFTful WCF Web 服务,并将其作为新的 Web 应用程序安装在 IIS 中。 WCF 有一些操作,例如:Login、getEmployees ...等。当我从 vs 发布和 运行 它时它工作正常,所以我可以从浏览器链接到达:
http://myserver/service.svc
http://myserver/service.svc?wsdl
http://myserver/Login?user=sample&password=paswd
http://myserver/getEmployees?name=dada
通过操作链接,我得到了确切需要的数据作为响应。
然而它仅在我 运行 来自 vs 的 Web 服务时有效,但是当我尝试从浏览器访问链接并且 Web 服务不是 运行ning 在 VS 中我只能访问链接如:
http://myserver/service.svc
http://myserver/service.svc?wsdl
但不是像这样的操作链接:
http://myserver/Login?user=sample&password=paswd
http://myserver/getEmployees?name=dada
端点配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings/>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service name="AXPAYROLL.PayrollActions" behaviorConfiguration="serviceBehavior">
<endpoint address="http://myserver/" behaviorConfiguration="RESTFriendly" binding="webHttpBinding" contract="AXPAYROLL.IPayrollActions">
<identity>
<dns value="myserver" />
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://myserver/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RESTFriendly">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<!-- To avoid disclosing metadata information,
set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="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" />
<serviceAuthorization serviceAuthorizationManagerType="AXPAYROLL.DataContractLayer.DistributorValidator, AXPAYROLL" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
我还创建了一个控制台主机应用程序,其中一切都像 vs 一样工作正常,所以 IIS 中的问题肯定可能出在权限中...
我是 WCF 的新手,但我认为这不是 运行 与始终部署 wcf 的正确方法!!!我还想在没有安装 vs 的生产服务器上安装 wcf,我知道可以通过控制台应用程序实现自我托管,但这又不是我想要的,我希望它 运行 超过正常iis,知道是什么问题吗?我错过了什么吗?
当IIS上的WCF服务时,<baseAddresses>
中指定的任何基地址都将被忽略,基地址将是.svc文件中的URL。
端点元素中的 address
属性是一个相对地址,可能类似于 address="rest"
.
所以在 IIS 中,url 将是 http://myserver/service.svc/rest/getEmployees?name=dada
更新:
要删除 svc 扩展,请查看 this question