2013-05-25 44 views
0

内这将是一个奇怪的问题,而是:建立一个WCF宿主一个网站项目

我目前运行在我的网站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> 

的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

在您的网站项目的属性Web选项卡,你在IIS托管其下?如果是这样,即使您没有使用内置的WCF测试客户端,WCF服务也将继续运行。 IIS在Visual Studio环境之外自行运行。如果你愿意,你可以通过在IIS管理器中停止它来关闭你的服务,但除此之外,它可以在VS之外使用。

相比之下,运行在一个控制台WCF服务(称为自托管)将关闭时,它的主机应用程序,即控制台应用程序,关闭。

总之,如果你正在使用本地IIS为您的web项目,那么这是没有什么你做了错误的,是预期的行为。关于在不同的机器上运行你的服务给你的测试客户端,这不是问题。如果你在IIS中运行它,那么你的主机只需要打开IIS并在那里运行IIS。瞧!如果您以自行托管的方式运行该服务,即在控制台中运行,请将控制台保持打开状态。请查看this StackOverflow question了解自托管的wcf vs IIS的一些优缺点(接受的答案对于特定的OP来说有点局限,但下面的答案更具信息性)。

我希望这可以帮助,我希望我不会在这里吠叫错误的树。

+0

我不知道这件事(我对所有这些编程业务都是新鲜的)。它在“使用本地IIS Web服务器”下进行检查。感谢您解决这个问题。你肯定不会在错误的树上大吼大叫,它帮了我很多。我希望像这样的问题不会被忽视(试图解决一些问题以解决直接问题) - 但它有助于我理解事情的运作方式。编辑:编辑出一个问题。我不会打扰你,并在再次提出另一个问题之前尝试查看它。 – user1339253

2

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

当主办IIS WCF服务,只要IIS是建立和运行(并且没有其他问题),你的服务可以接收请求。如果服务主机已被丢弃(由于不活动超时或其他原因),如果收到新的请求,IIS将启动一个新实例。另一方面,如果您在例如控制台应用程序中自行托管WCF服务,则服务能够响应请求的唯一时间是自运行应用程序正在运行时。

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

+0

感谢您解释自主服务器与IIS之间的区别。在另一个答案中发表了更大的评论。 – user1339253