Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在何处配置WCF服务(REST和SOAP)_C#_Wcf_Web Services_Web Config_Global Asax - Fatal编程技术网

C# 在何处配置WCF服务(REST和SOAP)

C# 在何处配置WCF服务(REST和SOAP),c#,wcf,web-services,web-config,global-asax,C#,Wcf,Web Services,Web Config,Global Asax,我正在实现一个WCF Web服务,该服务负责使用多个绑定通过REST和SOAP发布数据。该服务将托管在IIS上 我以前写过一些WCF服务,并且知道一些如何通过使用web.config和在Global.asax文件中设置路由来配置这些服务的知识,但是我对如何进行最“干净”的配置或配置WCF服务的最佳实践感到困惑 以下是我到目前为止得出的结论: web.config可用于设置绑定、端点、安全性等-在IIS上托管服务时需要这样做,还是可以在IIS上完成配置 通过使用Global.asax,我们可以配置

我正在实现一个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服务以支持以下内容:

  • 通过REST/JSON和
  • 通过SOAP/XML和发布元数据发布数据
  • 提供不同的服务;及
作为记录,我知道如何使用SOAP/REST发布数据——这不是问题所在。我只是尝试对服务进行最干净/最少的配置


非常感谢您的反馈。

以下是我如何做到这一点的

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>  

在.NET4.5中,您完全可以省略.config文件中的任何配置。[ServiceContract]、[OperationContract]、[DataContract]是必不可少的。他们并没有在文档中明确指出这一点,但它是有效的:)

“.NET Framework 4.5通过删除服务元素的要求,简化了WCF服务的配置。如果您没有添加服务节或在服务节中添加任何端点,并且您的服务没有以编程方式定义任何端点,则会自动将一组默认端点添加到您的服务中,每个服务基址和服务实现的每个契约对应一个


您将如何提出请求?我之所以这样问,是因为我刚刚尝试了您的建议,并且我只能通过/service/Update/1访问服务。对于SOAP客户端,URL是localhost:port/service.svc/SOAP。对于REST客户端,它是localhost:port/service.svc/REST/Update/1。我的答案是关于如何进行最低限度的配置两个端点。如果您需要确切的URL,则需要一些额外的配置。我需要能够配置位于两个不同URL上的服务:我部分使用了您的建议,因此我接受它作为答案。
[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(UriTemplate="/Update/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    void Update(string id, Entity entity);
}