2012-04-29 69 views
20

我是WCF新手。我开发了一个示例WCF服务。我的服务使用basicHttp绑定。如何在我的网站托管我的WCF服务?

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

我搜索谷歌,但其中大部分都托管在本地IIS中。请告诉我如何做到这一点?最好参考一些教程或一步一步的指南。

+2

参见:如何举办IIS中的WCF服务( http://msdn.microsoft.com/en-us/library/ms733766.aspx) - 无论是“localhost”还是任何其他服务器都完全不相关 - 只需遵循这些步骤即可。 –

回答

35

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

选项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. 把所有相关的直接*.cs文件到.\App_Code文件夹WCF
  3. 在该网站
  4. 创建 *.svc文件中创建一个网站
  5. 在网站文件夹中添加一个合适的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 Test Client)或者SoapUI这是一个通用SOAP测试实用程序(为您提供免费版本)使用)。

+1

选项2中的错误behaviorConfiguration =“true”正确的是behaviorConfiguration =“WithDebug” –

+0

@PavelJedlicka:你绝对是对的 - 谢谢你指出这个错误 - 修正! –

3

旧线,如果有人发现,但它...而不是你的* .SVC你也可以创建一个在您的Global.asax:

static Global() 
{ 
    RouteTable.Routes.Add(new ServiceRoute("ExternalServices/SOAP/test", new  ninjectServiceHostFactory(), typeof(testService))); 
} 
+0

我正面临类似的问题。你能否详细说明你的答案? –

+0

@ mav3n:如果您正在托管一个网站并想要托管一个WCF服务(在您的网站中),那么您可以在global.asax中添加上面的代码。这样你就不需要添加一个单独的* .svc文件。你会像你一样会创建一个服务。 在我的例子中我使用Ninject,但显然你可以使用默认的构造函数。 – Roelant