c# - WCF 不在消息中发送类型提示

标签 c# wcf

我的服务调用不起作用,这是因为消息中没有发送类型提示。

这是正在发送的内容。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <createLocalUser xmlns="http://adobe.com/idp/services">
            <localUser xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

这是应该的

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <createLocalUser xmlns="http://adobe.com/idp/services">
            <localUser i:type="UserImpl">

请注意 localUser 元素的变化。我知道这是问题所在,因为如果我在 fiddler 中修改请求,它就可以工作。我只是不知道要更改我的 C# 代码中的哪些内容。

这是我的 C# 类。

[DataContract(Name = "UserImpl", Namespace = NameSpace.Root)]
public partial class UserImpl : User { }

[DataContract(Name = "User", Namespace = NameSpace.Root)]
public partial class User : Principal { ... }

[DataContract(Name = "Principal", Namespace = NameSpace.Root)]
public partial class Principal { ... }

和界面

[ServiceContract(Namespace = NameSpace.Root)]
public interface IDirectoryManagementService
{
    [OperationContract(Name = "createLocalUser")]
    string CreateLocalUser(DataContracts.UserImpl localUser, string password);

我认为这是 ServiceKnownType 或 KnownType 的问题,但我不确定。

最佳答案

明白了。对于遇到相同问题的任何人,这就是不同之处。

我的服务接口(interface)被设置为接受一个 UserImpl 对象

string CreateLocalUser(DataContracts.UserImpl localUser, string password);

然后我向它传递了一个 UserImpl 实例。但是,我需要做的是将其更改为 User。由于 UserImpl 继承自 User,因此对于 C# 没有任何问题,但 WCF 注意到差异并添加了 i:type 属性。所以这也是我更改的内容。

[ServiceContract(Namespace = NameSpace.Root)]
    public interface IDirectoryManagementService
    {
        [OperationContract(Name = "createLocalUser")]
        string CreateLocalUser(DataContracts.User localUser, string password);

注意 localUser 参数现在是 User 类型。

关于c# - WCF 不在消息中发送类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23546595/

相关文章:

c# - 使用三元运算符的方法调用

c# - 如何使用 LinQ 搜索不在 char 数组中的字符串

c# - WCF 服务和本地主机 SQL Server 的连接字符串是什么

wcf - 服务的 "behaviorConfiguration"属性是什么?

wcf - 如何为单向方法启用可靠性?

c# - 具有多种实现的 .NET Core 3.1 中的依赖注入(inject)

c# - 尝试从子控件列表中有效地找到公共(public)父控件

c# - 子查询返回超过 1 个值.. 查询 C# 异常

c# - 如何将OperationContract应用到接口(interface)中的所有方法

c# - WCF 异步调用返回 10054 错误 : "An existing connection was forcibly closed by the remote host"