WCF Web服务错误:“服务端点绑定不使用HTTP协议”?

我有一个简单的WCF服务,在我的开发机器上进行测试时工作正常。

现在我已将Web服务移动到Web服务器,并且我正在http://mydomain.com:8005上运行该服务(在调试模式下)。 打开Web浏览器到该URL显示预期的服务页面,如果我在我正在调用的接口内的服务器上放置一个断点,它会命中断点并返回预期的数据……但是在客户端它返回出现以下错误:

接收到http://mydomain.com:8005/的HTTP响应时发生错误。 这可能是由于服务端点绑定不使用HTTP协议。 这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭)。 请参阅服务器日志以获取更多详

更多线索:界面签名是:

IEnumerable GetThings(out string errMsg); 

其中MyClass定义为Serializable,客户端和服务器之间的定义相同。

有什么想法我需要翻转什么秘密开关?

WCF还需要具有传递数据的具体类 (因为它都需要是XML可序列化的,并且必须能够以XML模式表示 – 接口不太适合)。

我相信它无法传回IEnumerable – 尝试使用List (或T[]数组)或具体类型。

运气好的话?

我遇到了同样的问题,因为我从服务器返回了大量的记录,我将以下行添加到我的wcf配置文件中并且它有效。

    

不要将MyClass定义为Serializable。 将其标记为[DataContract],将其属性标记为[DataMember]。

如果你不能,那么……我想我也看到了这个问题。

编辑

虽然没有任何固有的阻塞[Serializable]会导致序列化处理的可能性超过其处理能力。

编辑2

marc_s的评论说得对

派对迟到了,但我得到了同样的错误。

事实certificate,您不能将抽象类用于数据契约成员。 我不得不使用以下内容:

 [DataContract] public class MyClass { [DataMember] public A MyProperty { get; set; } } [DataContract] [KnownType(typeof(B))] [KnownType(typeof(C))] public class A { } [DataContract] public class B : A { } [DataContract] public class C : A { } 

为了让WCF能够序列化类似的东西

 var myClass = new MyClass(); myClass.MyProperty = new B(); 

如果在您之前的表中进行了任何更改并且未更新您的实体,则更新您的实体也会发生此错误

我只是留在这里,万一有人需要它。 我遇到了同样的错误。 我正在调用我的服务,其服务类型为Dictionary ,其中一个键/值对的字符串值设置为null。

我更改了代码以确保没有空值并且它有效

刚刚面临完全相同的问题,但它是由安全协议类型硬编码到TLS 1.2引起的,而服务部署到2008服务器没有R2(32位启动,这意味着不可升级到R2)。

对于其他任何人来说,这是一个非常不可能的场景,但我想我会提到。

如果有人处于相同的情况并且有一行这样的代码,你知道为什么你现在得到错误:

 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; 

我遇到了同样的问题。 这是EndpointAddress的端口地址问题。 在Visual Studio中,文件的端口地址(例如Service1.svc)和wcf项目的端口地址必须与您在EndpointAddress中的端口地址相同。 让我详细描述一下这个解决方案。

检查端口地址有两个步骤。

  1. 在您的WCF项目中右键单击您的服务文件(例如Service1.svc) – >然后在您的浏览器中选择在浏览器中查看您的url为http:// localhost:61122 / Service1.svc ,现在记下您的端口地址为一个61122

  2. 右键单击您的wcf项目 – >选择属性 – >转到Web选项卡 – >现在服务器部分 – >选择使用Visual Studio开发服务器 – >选择特定端口并提供我们之前从Service1找到的端口地址。服务svc。 那是(61122)

早些时候我有不同的端口地址。 正确指定端口地址后,我已经给了EndpointAddress ,我的问题解决了。

我希望这可以解决你的问题。