WCF服务库仅在从Visual Studio运行时才起作用
本文关键字:Studio 运行时 起作用 Visual 服务 WCF | 更新日期: 2023-09-27 18:00:46
我正在学习WCF。我有一个ASP.NET MVC2 web应用程序,我想从该应用程序发送mime格式的电子邮件,所以我想我应该将电子邮件功能封装在一个单独的WCF项目中,以备将来重用。因此,我向解决方案添加了一个WCF服务库,对电子邮件功能进行了编码,向web项目添加了服务引用,从VS中运行时一切正常。然而,如果我从浏览器窗口访问web应用程序(而不是通过Visual Studio"F5"),则WCF服务不起作用。我得到以下错误:
无法连接到远程服务器在System.Net.HttpWebRequest.GetRequestStream(TransportContext&上下文)System.Net.HttpWebRequest.GetRequestStream()在System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream()无法建立连接,因为目标机器主动拒绝127.0.0.1:8732,位于System.Net.Socket.Socket.DoConnect
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>
我需要做些什么才能让app+服务在VS2010之外工作?此外,当我最终部署到我们的服务器时,任何部署技巧都将不胜感激。
谢谢。
编辑谢谢你的回答。考虑到我将在网络上部署它,我是否应该创建一个单独的网络应用程序或网络服务,然后引用服务库,然后在适当的时候将其部署到独立的网络服务器?
如果您将服务部署到本地计算机,则很可能是服务运行的端口被防火墙阻止,或者您查看的端口错误。不要忘记,部署服务时,端口可能与开发环境使用的端口不同。
此外,也许更重要的是,您是否真的将服务部署到了本地机器上?当开发环境运行(F5)时,它会启动一个小版本的IIS来运行您的服务。当您尝试在开发环境之外运行它时,不会发生这种情况。您需要将WCF服务部署在某个位置(用于测试的机器或其他机器)。然后你就会知道它在监听哪个端口,你就可以正确地连接你的环境了。听起来你可能没有完成那一步,这就是你的问题所在。
以下是关于如何部署WCF服务的一个很好的演练教程:
http://www.dotnetspark.com/kb/1679-how-to-host-wcf-services-tutorial.aspx
原因是当你使用F5运行时,你的wcf服务会自动托管WcfSvcHost.exe。但当你通过localhost直接访问网页时(没有托管wcf服务),你会收到这个错误。您需要做的是首先在IIS(或其他任何地方)中托管wcf,然后使用web应用程序。
以下是托管wcf服务的选项。
WCF服务库只是WCF服务类、合约等的项目。它不是一项服务。当您从visual studio运行应用程序时,它会看到服务并将其托管在WcfSvcHost.exe(用于开发的辅助工具)中,但在实际运行的情况下,您必须自己托管该服务。