这将是一个奇怪的问题,但是:
我目前正在我的网站上运行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>
答案 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服务部署到远程服务器,然后使用您的客户端访问它。