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

问题描述 投票:0回答:9

我有一个简单的 WCF 服务,在我的开发机器上进行测试时运行良好。

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

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

更多线索:接口签名为:

IEnumerable<MyClass> GetThings(out string errMsg);

其中

MyClass
被定义为可序列化,并且客户端和服务器之间的定义是相同的。

有什么想法我需要打开什么秘密开关吗?

c# .net wcf exception wcf-binding
9个回答
23
投票

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

我相信它无法传回

IEnumerable<T>
- 尝试使用
List<T>
(或
T[]
数组)或具体类型来代替。

有运气吗?


8
投票

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

<system.web>
    <httpRuntime maxRequestLength ="262144" executionTimeout="103600"/>
</system.web>

4
投票

不要将 MyClass 定义为可序列化。将其标记为 [DataContract] 并将其属性标记为 [DataMember]。

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

编辑

虽然没有什么本质上阻塞的[Serialized]会导致你的序列化处理的数据可能超出它的处理能力。

编辑2

marc_s 的评论说得对


2
投票

迟到的答复,但我得到了同样的错误。

事实证明,您不能对数据协定成员使用抽象类。我必须使用以下内容:

[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();

0
投票

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


0
投票

我只是把它留在这里以防万一有人需要它。我遇到了同样的错误。我正在调用我的服务,该服务有一个类型为

Dictionary<int, string>
的参数,并且其中一个键/值对的字符串值设置为 null。

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


0
投票

刚刚遇到了完全相同的问题,但这是由硬编码为

TLS 1.2
的安全协议类型引起的,而服务部署到没有 R2 的 2008 服务器(32 位启动,这意味着无法升级到 R2)。

对于其他人来说,这是一种非常不可能的情况,但我想我会提到。

如果有人处于同样的情况并且有一行这样的代码,那么您现在就知道为什么会收到错误:

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

0
投票

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

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

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

  2. 右键单击您的 wcf 项目 -> 选择 Properties -> 转到 Web 选项卡 -> 现在在 Servers 部分 -> 选择 Use Visual Studio Development Server -> 选择 Specific Port 并给出我们之前从 Service1.svc 服务中找到的端口地址。那是 (61122)

之前我有不同的端口地址。在正确指定端口地址(我已将其输入到EndpointAddress中)后,我的问题得到了解决。

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


0
投票

当我将项目升级到 .NET Framework 4.8.1 后开始收到此错误时,情况有所不同。我所要做的就是将 .netFramework 包含在 httpRuntime 中,如下所示:

<httpRuntime targetFramework="4.8.1" maxRequestLength=
© www.soinside.com 2019 - 2024. All rights reserved.