Web 服务请求时出错:命名空间中的顶级 XML 元素"参数"引用不同的类型



我有以下使用Visual Studio工具导入的服务接口(它是一个WCF Web service)。

Reference.cs

但是当我尝试使用服务AuthenticateJAAS时(执行web服务),我得到以下错误:

InvalidOperationException:来自命名空间的顶部XML元素'parameters'引用不同的类型XAFProject.Module.WS.MCWFUsers.mcwfUsersGetUserGroupsIn和XAFProject.Module.WS.MCWFUsers.mcwfUsersAuthenticateJAASIn。使用XML属性为元素或类型指定另一个XML名称或名称空间。

我不能更改名称空间或元素名称"参数",因为它来自无法更改的WSDL(第三方)。当我删除类GetUserGroupsRequest和Reference.cs中的相关内容,我可以使用web服务AuthenticateJAAS没有问题。生成的XML是:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<AuthenticateJAAS xmlns="http://services.senior.com.br">
<user xmlns=""/>
<password xmlns=""/>
<encryption xmlns="">0</encryption>
<parameters xmlns="">
<flowInstanceID xsi:nil="true"/>
<flowName xsi:nil="true"/>
<pmUserName>******</pmUserName>
<pmUserPassword>******</pmUserPassword>
</parameters>
</AuthenticateJAAS>
</s:Body>
</s:Envelope>

是否有一种方法可以使用两种方法/服务(AuthenticateJAAS + GetUserGroupsRequest)没有任何错误?我在想,也许,如果我使用命名空间前缀,我想我可以同时使用这两个服务。

下面是我初始化客户端并执行服务的部分代码:

sapiens_SyncMCWFUsersClient mCWFUsersClient = new sapiens_SyncMCWFUsersClient(); 
mcwfUsersAuthenticateJAASIn parameters = new mcwfUsersAuthenticateJAASIn();
parametrosEntrada.pmUserName = "******";
parametrosEntrada.pmUserPassword = "******";
parametrosEntrada.pmEncrypted = 0;
AuthenticateJAASRequest request = new AuthenticateJAASRequest("", "", 0, parameters); 
AuthenticateJAASResponse response = mCWFUsersClient.AuthenticateJAAS(request);

到目前为止,我通过在Reference.cs文件中执行以下操作来解决问题。[System.ServiceModel.MessageBodyMemberAttribute(Namespace= "", Order=3, Name = "parameters")]。然后,我将字段名更改为"参数"以外的任何名称。这里是public MCWFUsers.mcwfUsersGetUserGroupsIn parametersGetUserGroups;这意味着它不会在cs文件中引用不同的类型。

我改了这个:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
[System.ServiceModel.MessageContractAttribute(WrapperName="GetUserGroups", WrapperNamespace="http://services.senior.com.br", IsWrapped=true)]
public partial class GetUserGroupsRequest
{

[System.ServiceModel.MessageBodyMemberAttribute(Namespace= "", Order=0)]
public string user;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace= "", Order=1)]
public string password;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace= "", Order=2)]
public int encryption;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace= "", Order=3)]
public MCWFUsers.mcwfUsersGetUserGroupsIn parameters;

public GetUserGroupsRequest()
{
}

public GetUserGroupsRequest(string user, string password, int encryption, MCWFUsers.mcwfUsersGetUserGroupsIn parameters)
{
this.user = user;
this.password = password;
this.encryption = encryption;
this.parameters = parameters;
}
}

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
[System.ServiceModel.MessageContractAttribute(WrapperName="GetUserGroups", WrapperNamespace="http://services.senior.com.br", IsWrapped=true)]
public partial class GetUserGroupsRequest
{

[System.ServiceModel.MessageBodyMemberAttribute(Namespace= "", Order=0)]
public string user;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace= "", Order=1)]
public string password;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace= "", Order=2)]
public int encryption;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace= "", Order=3, Name = "parameters")]
public MCWFUsers.mcwfUsersGetUserGroupsIn parametersGetUserGroups;

public GetUserGroupsRequest()
{
}

public GetUserGroupsRequest(string user, string password, int encryption, MCWFUsers.mcwfUsersGetUserGroupsIn parameters)
{
this.user = user;
this.password = password;
this.encryption = encryption;
this.parametersGetUserGroups = parameters;
}
}

编辑:不,不幸的是,这并没有解决问题。我会继续努力的。