20

我是 WCF 的新手。我开发了一个示例 WCF 服务。我的服务使用basicHttp绑定。

我使用 WAS 在本地 IIS 7.5 中托管我的服务,它工作正常。现在我想在我的网站上托管我的服务。

我搜索谷歌,但它们中的大多数都托管在 IIS 的 localhost 中。请告诉我该怎么做?最好参考一些教程或分步指南。

4

3 回答 3

36

我相信你基本上有两种选择:

选项 1 - “bin”部署(首选选项)

  1. 将您的 WCF 服务编译为 DLL(类库)
  2. 在 IIS 中创建网站
  3. 将 WCF DLL 复制到网站的.\bin文件夹中
  4. 在该网站中创建一个*.svc文件
  5. 在网站文件夹中添加一个适当web.config的来定义您的端点和服务配置等。

您的 WCF 服务现在可以通过网站的基地址以及*.svc文件名访问,例如

http://myserver/someweb/Myservice.svc

*.svc会看起来像这样:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WCF_Simple_Service.HelloIndigoService"  %>

属性表示实现服务的Service=类 - 完全限定其名称空间。

选项 2 - 把东西放进去App_Code

  1. 在 IIS 中创建网站
  2. 将所有 WCF 相关*.cs文件直接放入.\App_Code文件夹中
  3. 在该网站中创建一个*.svc文件
  4. 在网站文件夹中添加一个适当web.config的来定义您的端点和服务配置等。

您的 WCF 服务现在可以通过网站的基地址以及*.svc文件名访问,例如

http://myserver/someweb/Myservice.svc

*.svc会看起来像这样:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="Service" 
    CodeBehind="~/App_Code/Service.cs" %>

一个简单的示例web.config可能如下所示:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="WithDebug">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  <services>
    <service name="SimpleWCF.HelloIndigoService" behaviorConfiguration="WithDebug">
      <endpoint
          address=""
          binding="basicHttpBinding"
          contract="SimpleWCF.IHelloIndigoService" />
      <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

您基本上定义了您的<service>标签 - 再次:name=表示实现服务的类 - 完全限定其名称空间。它必须包含至少一个端点——“mex”端点是可选的——但非常有用,尤其是对于开发和测试。它允许客户端“发现”服务并获取其服务描述,以便与​​它进行交互。

在 IIS 中部署服务后,您可以使用WCF 测试客户端(WCF 免费提供)或SoapUI(一种通用 SOAP 测试实用程序)等工具查看它的运行情况(提供免费版本供您使用) .

于 2012-04-29T18:17:38.953 回答
3

旧线程,如果有人找到它......但你也可以在你的 global.asax 中创建而不是你的 *.svc:

static Global()
{
    RouteTable.Routes.Add(new ServiceRoute("ExternalServices/SOAP/test", new     ninjectServiceHostFactory(), typeof(testService)));
}
于 2015-11-24T14:01:41.880 回答
0

除了 Marc 的回答之外,如果您将工厂属性添加到您的 *.svc 文件中,如下所示,您无需更改主项目中的 web.config 文件中的任何内容。让我再重复一遍。web.config 文件中没有大量混乱,保持原样。这是因为 svc 文件中的 Factory 属性会照顾到这一切。

<%@ ServiceHost Language="C#" Debug="true" Service="WCF_Simple_Service.HelloIndigoService" Factory="System.ServiceModel.Activation.WebServiceHostFactory"  %>

但我必须说,当你调用你的服务时,它会给出端点未找到错误。但是当你在你的服务中调用你的方法时,它们都会起作用。在宁静的 wcf 中测试。

于 2018-07-03T12:33:25.427 回答