The operation 'PRPA_IN201301UV02' could not be loaded because it has a parameter or return type of type System.ServiceModel.Channels.Message or a type that has MessageContractAttribute and other parameters of different types. When using System.ServiceModel.Channels.Message or types with MessageContractAttribute, the method must not use any other types of parameters.
我在控制台主机上运行WCF,这是合同:
[MessageContract]
public class opRequest
{
[MessageBodyMember]
public string myProperty;
}
[ServiceContract(Namespace = "urn:hl7-org:v3")]
public interface IHL7v3
{
[OperationContract(Name = "PRPA_IN201301UV02", Action = "urn:hl7-org:v3:PRPA_IN201301UV02")]
string PIXManager_PRPA_IN201301UV02(opRequest clientID);
}
当我从opRequest类中删除[MessageContract]
和[MessageBodyMember]
我完全不确定这是否能让我得到我需要的东西,所以我会给更广泛的范围 - 我试图让SOAP主体没有参数名称的封闭标签。 例如(SOAP消息中的正文提取)而不是:
<s:Body>
<PRPA_IN201301UV02 xmlns="urn:hl7-org:v3">
<clientID>the xml document is enclosed</clientID>
</PRPA_IN201301UV02>
我希望它是这样的:
<s:Body>
<PRPA_IN201301UV02 xmlns="urn:hl7-org:v3">
my given xml document will go here...
</PRPA_IN201301UV02>
我需要它符合标准(HL7v3 PIX Manager SOAP Web服务)。
有什么想法吗?
答案 0 :(得分:1)
看起来你应该使用MessageContract作为返回参数
<强>编辑:强> 有关详细信息,请查看此MSDN文章Using Message Contracts 如果您使用消息设计合同,则不能将其他类型用作参数或返回值。
以下是文章中的代码段:
[OperationContract]
bool Validate(BankingTransaction bt);
// Invalid, the return type is not a message contract.
[OperationContract]
void Reconcile(BankingTransaction bt1, BankingTransaction bt2);
// Invalid, there is more than one parameter.
答案 1 :(得分:0)
您是否尝试使用XMLDocument
作为输入参数而不是opRequest
?您还必须标记接口以使用XML Serializer:
[ServiceContract(Namespace = "urn:hl7-org:v3")]
[XmlSerializerFormat]
public interface IHL7v3
{
[OperationContract(Name = "PRPA_IN201301UV02", Action = "urn:hl7-org:v3:PRPA_IN201301UV02")]
XMLDocument PIXManager_PRPA_IN201301UV02(XMLDocument doc);
}
我假设您也在返回XML。
请注意,这是全开 - 可以发送任何XML,这可能不是您想要的,因为没有明确的数据合同。