我正在学习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服务器?
答案 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服务的选项。