用于休息服务的system.servicemodel endpoint.address元素的说明

时间:2011-01-14 17:12:29

标签: wcf web-services rest configuration endpoint

我有一个WCF休息网络服务。它工作正常。我想了解端点元素中可用的不同配置值。

特别是,我试图理解address元素的用途。更改值似乎不会改变我如何处理服务。为此,我正在运行visual studio 2010和cassini的服务。端口号设置为888。

地址设置为空字符串我得到... http://localhost:888/restDataService.svc/hello将返回“hello world”。

地址设置为“localhost”我得到... http://localhost:888/restDataService.svc/hello将返回“hello world”。

地址设置为“pox”我得到... http://localhost:888/restDataService.svc/hello将返回“你好世界”。

我在地址字段中设置的值无关紧要。它不会影响网址。我唯一的解释是,非REST服务的价值更高。

<system.serviceModel>
  <services>
    <service behaviorConfiguration="MobileService2.DataServiceBehaviour" name="MobileService2.DataService">

      <endpoint address="pox" binding="webHttpBinding" contract="MobileService2.IRestDataService" behaviorConfiguration="webHttp">
      </endpoint>

      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"  />
    </service>
  </services>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webHttp">
        <webHttp />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="MobileService2.DataServiceBehaviour" >
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

我还有以下服务合同

    [ServiceContract]
    public interface IRestDataService
    {
        [OperationContract]
        [WebGet(UriTemplate = "hello")]
        string Hello();
    }

在.svc

<%@ ServiceHost Language="C#" Debug="true" 
            Service="MobileService2.RestDataService" 
            Factory="System.ServiceModel.Activation.WebServiceHostFactory"
            CodeBehind="RestDataService.svc.cs" %>

'代码隐藏'

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestDataService : IRestDataService
{
    public string Hello()
    {
        return "hello";
    }
}

1 个答案:

答案 0 :(得分:2)

您还可以显示配置的服务元素吗?我认为您的配置未使用或您正在访问应用程序的其他实例(您是否将Cassini配置为使用端口80?),因为您的第二次和第三次测试应该返回找不到HTTP 404资源。

您的测试的正确地址是:

  1. http://localhost/restDataService.svc/hello
  2. http://localhost/restDataService.svc/localhost/hello
  3. http://localhost/restDataService.svc/pox/hello
  4. 检查service元素中的名称是否与.svc标记中的ServiceHost指令中使用的服务类型名称(包括名称空间)完全相同。