每当尝试连接到我自己的wcf时,我都会收到超时异常。
这是我的配置:
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MetaBehaviour">
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MetaBehaviour" name="WcfStreaming.LargeDataService">
<clear />
<endpoint address="net.tcp://localhost/LargeData" binding="netTcpBinding"
name="Tcp" contract="WcfStreaming.ILargeDataService" listenUriMode="Explicit" />
<endpoint address="net.tcp://localhost/LargeData/mex" binding="mexTcpBinding"
name="TcpMex" contract="IMetadataExchange" listenUriMode="Explicit" />
<endpoint address="http://localhost/wcfstreaming" binding="basicHttpBinding"
bindingConfiguration="" name="BasicHttp" contract="WcfStreaming.ILargeDataService" />
</service>
</services>
</system.serviceModel>
</configuration>
这里是托管代码:
host = new ServiceHost(typeof(WcfStreaming.LargeDataService),
new Uri[] { HttpUri, TcpUri });
host.Open();
var factory = new ChannelFactory<WcfStreaming.ILargeDataService>(new NetTcpBinding(), new EndpointAddress(TcpUri)); // Hnew NetTcpBinding(), new EndpointAddress(TcpUri));
srvChannel = factory.CreateChannel();
using (OpenFileDialog dlg = new OpenFileDialog())
{
if (dlg.ShowDialog() == DialogResult.OK)
{
Stream str = srvChannel.GetFile(dlg.FileName); //Exception here
StreamReader sr = new StreamReader(str);
string bf = sr.ReadToEnd();
File.WriteAllText(@"C:\test", bf);
}
}
我讨厌:
发送到net.tcp:// localhost / LargeData的请求操作未在配置的超时(00:01:00)内收到回复。分配给此操作的时间可能是较长超时的一部分。这可能是因为服务仍在处理操作,或者因为服务无法发送回复消息。请考虑增加操作超时(通过将通道/代理强制转换为IContextChannel并设置OperationTimeout属性)并确保该服务能够连接到客户端。
答案 0 :(得分:2)
您可以通过将以下内容放入app.config文件(项目调用您的wcf服务,而不是wcf服务app.config文件)来添加wcf跟踪。跟踪将转储到c:\ wcf.svclog
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, Warning, ActivityTracing, Error, Critical"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\wcf.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
此外,如果它在VS下运行,但不在其外部运行,则表示您创建的服务主机与app.config文件中定义的服务端点不匹配(同样是调用wcf的项目的配置文件,而不是wcf的app.config文件)。或者,servicehost实例化代码永远不会运行。
它在VS下运行因为VS默认创建一个WCF调试主机,它加载你的wcf服务并公开服务和MEX url。如果应用程序崩溃,有时这个调试辅助工具会继续运行。该过程是wcfsvchost.exe。
“Mex”允许您获取服务的元数据,因此最终程序不需要它。