- 卷积神经网络学习笔记——ZFNet(Tensorflow实现)
- 24年3月使用VS22编译TelegramDesktop
- STM32中RFID模块(MFRC522)简单应用
- java反序列化-CC1
最近遇到了WCF 服务无法调用的错误,异常如下.
System.ServiceModel.ProtocolException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Error while reading message framing format at position 0 of stream (state: ReadingUpgradeRecord)
System.IO.InvalidDataException, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 More data was expected, but EOF was reached.
WCF的问题一般需要对框架比较熟悉,有时难以定位。第一眼找不到原因的先 根据官方文档打开WCF日志 。
日志打开后发现服务端完全没有调用的记录。这时怀疑是不是调错端口了,打开资源管理器,服务正常跑着。只能再打开Wireshark记录日志,大概就是正常的3次握手,不正常的不知为何服务端主动FIN并RESET的连接.
在WCF的问题处理中,自己的日志/WCF的日志/抓包的日志都很重要.
最后的原因发现是端口被罗技升级程序占用的问题, 考虑如下示例代码 。
// 设置要监听的端口号
int port = 13000;
TcpListener listener = new TcpListener(IPAddress.Any, port);
TcpListener listener2 = new TcpListener(IPAddress.Loopback, port);
// 开始监听
listener.Start();
listener2.Start();
// 并不会抛出异常
Console.ReadLine();
工作久了过于相信经验,感觉一定会异常,但端口监听的是套接字,自然0.0.0.0:13000 和 127.0.0.1:13000不是一回事.
wcf的通信流程大概是这样的.
// 客户端发送服务端基地址,确认这是一个wcf的服务
client-> service: net.tcp://127.0.0.1:39100/Service
// 服务端回0b 代表确认
service-> client: 0x0b
// 客户端发送具体调用的内容
.....
由于服务端不回 0x0b,自然会出现这样的异常。附一下异常的调用栈。事后看看也挺明显.
System.ServiceModel.Channels.ConnectionUpgradeHelper.ValidatePreambleResponse(Byte[] buffer, Int32 count, ClientFramingDecoder decoder, Uri via)
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper)
System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout)
System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
...
最后此篇关于WCF异常System.ServiceModel.ProtocolException问题处理的文章就讲到这里了,如果你想了解更多关于WCF异常System.ServiceModel.ProtocolException问题处理的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试使用 ASP.NET MVC 实现 OpeinID 登录。我正在尝试按照 http://blog.nerdbank.net/2008/04/add-openid-login-support-
我一直在处理一个反复出现的问题,我感到非常沮丧。我正在尝试通过我在网上找到的模板 php web 服务连接到我的数据库,方法是向它发送 JSONObjects。尝试从服务器获取响应代码时,我不断收到
我有一个在不同环境中运行的简单 WCF 服务。今天,我尝试在我的 Windows 7 工作站上运行它,但在我的客户端(这是用于测试的简单控制台应用程序)上出现此错误: System.ServiceMo
安装 Windows Azure Powershell(2012 年 10 月版本 0.6.7)后,我在运行 Set-AzureDeployment 时收到错误Cmdlet。 向Remove-Azur
从 WCF 访问 DotNet 的方法时出现以下错误 内容类型text/html;响应消息的 charset=utf-8 与绑定(bind)的内容类型不匹配(text/xml;charset=utf-
当我尝试调用 getChildren() 时在 mediapipeline 上其中运行了我的自定义模块端点我收到此异常: org.kurento.client.internal.server.Prot
我以前使用的是 HttpClient 和 BasicNameValuePairs,由于某些原因我不得不转向 HttpUrlConnection。 因此,这段代码使用特定参数发出 HttpPost 请求
从 HttpClient 下载时,我有时会得到这样的堆栈跟踪: java.net.SocketTimeoutException: Read timed out, at java.net.SocketI
我正在尝试使用 Retrofit 将数据修补到我的服务器(rest API spring)。 我正在使用改造 1.9.0。 D/Retrofit: ---> HTTP PATCH http://mys
我试图通过 HttpURL 连接创建一个 FlickR 请求,我在 con.getInputStream() 上得到了一个 java.net.protocolException Thr
编辑:导致错误的原因是 url 变量声明中的拼写错误。提供的代码在输入正确的情况下有效。有关详细信息,请参阅我的答案。 原始问题:我正在开发一个定期向特定 Web 服务器发送 GET 请求的应用程序。
我正在尝试使用 firebase 发送通知...7天前代码正在工作,但现在每当我调用 conn.getOutputStream(); 时,我得到的只是(java.net.protocolExcepti
我正在尝试将对象从小程序发送到 struts 操作类使用对象输出流,但它给了我一个异常java.net.ProtocolException:读取输入后无法写入输出。 我创建了一个新的 URLConne
改造网络调用在工作应用中突然出现协议(protocol)异常而失败。该应用程序一直工作到昨天,今天所有的网络调用都失败了。调用在 HTTP 上运行良好,但在 HTTPS 下失败。 这是日志, java
我编写了一个简单的 httprequest/response 代码,但收到以下错误。我在类路径中引用了 httpclient、httpcore、common-codecs 和 common-loggi
我收到 java.net.ProtocolException对于一些视频。这就是将 URL 传递给 videoview 的方式.以前有人遇到过这种情况吗? videoview.setVideoURI(
我目前正在开发 Android 应用程序,并且正在使用 okttp3 发出一个简单的 GET 请求。我使用我的 Flask 应用程序作为 API 端点。Android 代码: OkHttpClien
我有这个代码: import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConn
我正在使用我在 Web 服务端无法控制的 WCF Web 服务。 我已经提供了一个自动生成的 svc.cs 代理文件,我正在使用它。 实际上我是在请求 Web 服务从客户端下载一些大数据。 有时我得到
我正在尝试使用此页面中推荐的代码 http://blogs.msdn.com/b/nathana/archive/2011/03/31/deciphering-a-soap-fault-with-a-
我是一名优秀的程序员,十分优秀!