在网站项目中设置WCF主机

时间:2013-05-25 22:34:26

标签: asp.net wcf visual-studio-2012

这将是一个奇怪的问题,但是:

我目前正在我的网站上运行wcf服务(在Visual Studio 2012中生成 - .scv文件)。我有一个控制台客户端,除了内置的wcf测试客户端,我尝试测试连接。测试客户端运行良好,我可以调用这些函数,但是当我停止运行站点/测试客户端(这应该是指扩展名的主机,对吗?)时,我的控制台客户端可以仍然跑去和服务谈谈就好了 我还能够访问WCF服务页面,而不是在浏览器中运行。当我在控制台中创建WCF时,在主机实际上没有运行时我无法执行任何这些操作。因此,我想知道代码是否有问题,我只是没有看到。

当我尝试在服务器上使网站上线时,我发现这会成为一个问题(因为我的测试客户端不会与服务位于同一台机器上。我假设这种情况正在发生,因为我有即使文件没有运行也可以访问文件。

我该怎么做/什么是错的?

感谢您的时间。

相关的web.config代码:

  <system.serviceModel>
    <services>
<!-- ICanHasGamez=solution that holds the webpage&wcfservice -->
      <service name="ICanHasGamez.APIHost" behaviorConfiguration="behavior">
        <endpoint address="" binding="basicHttpBinding" contract="ICanHasGamez.IAPIHost">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name ="behavior">
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
来自Console Client的

app.config代码:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IAPIHost" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:2105/APIHost.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IAPIHost" contract="ServiceReference1.IAPIHost"
                name="BasicHttpBinding_IAPIHost" />
        </client>
    </system.serviceModel>
</configuration>

2 个答案:

答案 0 :(得分:2)

在网站标签下的网站项目属性中,您是否在IIS中托管?如果是这样,即使您没有使用内置的WCF测试客户端,WCF服务也将继续运行。 IIS在visual studio环境之外独立运行。如果您愿意,可以通过在IIS管理器中停止服务来关闭服务,否则它可以在VS之外使用。

相反,在控制台(称为自托管)中运行WCF服务将在其主机应用程序(即控制台应用程序)关闭时关闭。

简而言之,如果您正在为您的Web项目使用本地IIS,那么这不是您做错的任何事情并且是预期的行为。关于在不同的计算机上为您的测试客户端运行服务,这不是问题。如果您在IIS中运行它,那么您的主机计算机只需要打开IIS并在那里运行IIS项目。瞧!如果您将服务作为自托管运行,即在控制台中运行,只需将控制台保持打开状态即可。查看this StackOverflow question了解自托管wcf与IIS之间的一些优缺点(接受的答案对于特定OP来说有点局部,但下面的答案提供了更多信息)。

我希望这会有所帮助,我希望我不会在这里咆哮错误的树。

答案 1 :(得分:2)

我没有看到你描述的情景有什么问题 - 它的预期行为。

当您在IIS中托管WCF服务时,只要IIS启动并运行(并且没有其他问题),您的服务就可以接收请求。如果已处置服务主机(由于不活动超时或其他原因),如果收到新请求,IIS将启动新实例。

另一方面,如果您在例如控制台应用程序中自托管WCF服务,则服务能够响应请求的唯一时间是自托管应用程序正在运行。< / p>

所以回答你的问题,你没有做错任何事情,你不需要做任何不同的事情。您应该能够简单地将WCF服务部署到远程服务器,然后使用您的客户端访问它。