0

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

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

2 回答 2

2

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

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

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

我希望这会有所帮助,我希望我没有在这里吠叫错误的树。

于 2013-05-26T00:44:00.183 回答
2

我认为您描述的场景没有任何问题 - 它的预期行为。

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

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

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

于 2013-05-26T00:44:13.630 回答