WCF服务库仅在从Visual Studio运行时才起作用

时间:2011-06-28 13:06:29

标签: c# visual-studio wcf web-applications

我正在学习WCF。我有一个ASP.NET MVC2 Web应用程序,我想从应用程序发送mime格式的电子邮件,所以我认为我将电子邮件功能封装在一个单独的WCF项目中以供将来重用等。因此我添加了一个WCF服务库解决方案,编码电子邮件功能,为Web项目添加了服务引用,从VS内部运行时一切正常。但是,如果我从浏览器窗口(而不是通过Visual Studio'F5')访问Web应用程序,则WCF服务不起作用。我收到以下错误:

  

无法连接到远程服务器   在   System.Net.HttpWebRequest.GetRequestStream(TransportContext&安培;   上下文)   System.Net.HttpWebRequest.GetRequestStream()   在   System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream()   无法建立联系,因为   目标机器积极拒绝它   在System.Net.Sockets.Socket.DoConnect

的127.0.0.1:8732

Web应用程序中的web.config文件已修改(由WCF),如下所示:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IEmailService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:8732/Design_Time_Addresses/Email/EmailService/"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IEmailService"
        contract="EmailServiceReference.IEmailService" name="WSHttpBinding_IEmailService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

我需要做些什么才能让应用+服务在VS2010之外工作?此外,当我最终部署到我们的服务器时,任何部署技巧都将非常受欢迎。

感谢。

修改 感谢所有的答案。鉴于我将在网上部署这个,我应该创建一个单独的Web应用程序或Web服务,然后引用服务库,然后我将在适当的时候部署到一个独立的Web服务器?

3 个答案:

答案 0 :(得分:3)

如果您将服务部署到本地计算机,则很可能是运行服务的端口被防火墙阻止,或者您正在查看错误的端口。不要忘记在部署服务时,端口可能与开发环境使用的端口不同。

此外,也许更重要的是,您是否实际将服务部署到本地计算机?当开发环境运行时(F5),它会启动一个小版本的IIS来运行您的服务。当您尝试在开发环境之外运行它时,这不会发生。您需要在某处部署WCF服务(您的机器用于测试或另一台)。然后你会知道它正在监听什么端口,你可以正确地连接你的环境。听起来你可能没有完成那一步,这会导致你的问题。

以下是有关如何部署WCF服务的精彩演练教程:

http://www.dotnetspark.com/kb/1679-how-to-host-wcf-services-tutorial.aspx

答案 1 :(得分:1)

WCF服务库只是WCF服务类,合同等的项目。它不是服务。从visual studio运行应用程序时,它将看到该服务并将其托管在WcfSvcHost.exe(用于开发的辅助工具)中,但是在实际运行的情况下you must host the service yourselves

答案 2 :(得分:1)

原因是当您使用F5运行时,您的wcf服务会自动托管WcfSvcHost.exe。但是当通过localhost直接访问网页(没有havign wcf服务托管)时,你会收到此错误。您需要做的是首先在IIS(或其他任何地方)托管wcf,然后使用Web应用程序。

Here是托管您的wcf服务的选项。