如何配置WCF服务(REST和SOAP)的位置

4
我正在实现一个WCF Web服务,负责通过多个绑定使用REST和SOAP发布数据。该服务将托管在IIS上。
我之前编写过一些WCF服务,并且知道如何使用web.config配置它们并在Global.asax文件中设置路由,但是我对如何进行“清洁”配置或配置WCF服务的最佳实践感到困惑。
目前为止,我已经了解到以下内容:
可以使用web.config来设置绑定、端点、安全性等 - 在IIS上托管服务时是否需要这样做,还是可以在IIS上进行配置?
通过使用Global.asax,我们能够配置路由(以及许多其他内容)。但是这是正确的地方吗?
void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.Add(new ServiceRoute("Service", new WebServiceHostFactory(), typeof(Service)));
    }

我花了一些时间在谷歌上搜索这个话题,似乎每个链接都有自己的观点来完成任务。
因此,我想要一些关于如何配置/实现WCF服务以支持以下内容的输入: 就记录而言,我知道如何使用SOAP/REST发布数据 - 这不是问题。 我只是试图使服务的配置最为干净/最小化。
非常感谢您的任何反馈。
2个回答

6
这是我完成此任务的方法。
Web.config文件:
<system.serviceModel>
    <services>
        <service name="Service">
            <endpoint address="soap" contract="IService" binding="basicHttpBinding"/>
            <endpoint address="rest" contract="IService" binding="webHttpBinding" behaviorConfiguration="restBehavior"/>
        </service>
    </services>
    <behaviors>
        <endpointBehaviors>
            <behavior name="restBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
            <serviceMetadata httpGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>  

合同看起来像这样:
[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(UriTemplate="/Update/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    void Update(string id, Entity entity);
}

你怎么发送一个请求呢? http://localhost:port/Service/Update/1 ? 我问这个是因为我刚刚按照你的建议尝试了一下,但是我只能通过 http://localhost:port/Service1.svc 来访问服务,而不能使用 /Service/Update/1。 - Nicklas Møller Jepsen
对于SOAP客户端,URL为localhost:port/Service.svc/soap。对于REST客户端,它是localhost:port/Service.svc/rest/Update/1。我的答案是关于如何最小化配置两个端点。如果您需要精确的URL,则需要进行一些额外的配置。 - Dmitriy Melnik
我需要能够配置位于两个不同URL上的服务:http://domain.com/Service 和 http://domain.com/AuthService。 - Nicklas Møller Jepsen
我部分采用了您的建议,因此我接受它作为答案。 - Nicklas Møller Jepsen

0

使用 .net 4.5,您可以完全省略.config文件中的任何配置。 [ServiceContract]、[OperationContract] 和 [DataContract] 是必不可少的。虽然文档没有明确说明,但它确实有效 :)

".NET Framework 4.5通过删除service元素的要求,使配置WCF服务更加容易。如果您不添加service部分或在service部分中添加任何端点,并且您的服务没有以编程方式定义任何端点,则一组默认端点将自动添加到您的服务中,每个服务基地址和每个服务实现的契约一个。" - 来自

https://msdn.microsoft.com/en-us/library/ee358768%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接