【问题标题】:WCF PerSesson InstanceContextMode prevents generation of proxies using SVCUtilWCF PerSesson InstanceContextMode 防止使用 SVCUtil 生成代理
【发布时间】:2011-10-20 04:55:19
【问题描述】:

我有一个 Windows 服务托管的 WCF Web 服务。我一直在使用 SVCUTIL 生成代理并且一切正常,但是今天我将 InstanceContextModeInstanceContextMode.Single 更改为 InstanceContextMode.PerSession现在我得到以下我无法隔离的错误。我可以通过更改除此设置之外的任何内容来可靠地重新创建错误。有什么想法???

这是来自 SVCUTIL 的错误消息

正在生成元数据文件... EXEC : error : 出现错误 导出服务类型: Host.Services.MyService。

An exception was thrown in a call to a WSDL export extension:

System.ServiceModel.Description.DataContractSerializerOperationBehavior 合同: http://MySoftware/ServiceContracts/2011/02:IMyService

服务接口如下:

[ServiceContract(Namespace = Namespace.Current, SessionMode = SessionMode.Allowed)]
public interface IMyService

服务实现现在配置如下:

[ServiceBehavior(Namespace = Namespace.Current, InstanceContextMode = InstanceContextMode.PerSession)]
public class MyService : IMyService

这是我的配置文件中数据合约序列化程序的当前设置

<dataContractSerializer maxItemsInObjectGraph="1000000" />

【问题讨论】:

    标签: c# wcf datacontractserializer svcutil.exe


    【解决方案1】:

    这似乎与实例上下文模式无关。
    请尝试以下操作:

    1. 使用 HTTP 嗅探器(例如 fiddler)查看返回的 WSDL 文件。确保您没有收到错误页面而不是 wsdl 文件。
    2. 如果您获取的是 WSDL 文件而不是错误页面,请保存该文件,将服务更改回单一服务,获取 WSDL 并比较两个 WSDL 文件以找出问题所在。

    【讨论】:

    • 我将更改部署到测试环境,并能够确认该产品仍按预期工作 (functionally)。我还使用服务模型性能计数器确认了实例化行为按预期更改。我仍然无法使用 SVCUtil 创建代理。我仍在审查 WSDL,但预计不会发现任何变化,因为这纯粹是主机行为的变化,而不是消费者的合同变化。重申一下,唯一的变化是 InstanceContextMode
    • 实例上下文模式仅影响服务主机为您的服务类型创建实例的方式。访问元数据不需要创建实例,因此不应该影响使用 svcutil。尝试在服务端打开 WCF 跟踪并检查日志是否有任何错误。
    • 再次感谢,不幸的是这并没有发现任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多