【问题标题】:The WCF service operation type is not supported不支持 WCF 服务操作类型
【发布时间】:2019-02-23 14:24:24
【问题描述】:

我创建了一个具有 2 个异步操作的 WCF 服务。 WCFTestClient 返回错误:

WCF 测试客户端不支持该操作,因为它使用类型 SendCreditTransferRequest。

我不明白 ProcessingFault 操作是否有效,而另一个 (SendCreditTransferRequest) 为什么无效。

我的.svc 代码:

namespace SimulatorServices
{
    public class RealTimePortType : IRealTimePortType
    {
        public void SendCreditTransferRequest(SendCreditTransferRequest request)
        {
            throw new NotImplementedException();
        }

        public void ProcessingFault(ProcessingFault1 request)
        {
            throw new NotImplementedException();
        }
    }
}

我的.svc.cs 代码:

namespace SimulatorServices
{
    [ServiceContract]
    public interface IRealTimePortType
    {
        [System.ServiceModel.OperationContractAttribute(IsOneWay = true, Action = "http://realtime247.eu/realtime247/SendCreditTransferRequest")]
        [System.ServiceModel.XmlSerializerFormatAttribute()]
        void SendCreditTransferRequest(SendCreditTransferRequest request);

        [System.ServiceModel.OperationContractAttribute(IsOneWay = true, Action = "http://realtime247.eu/realtime247/ProcessingFault")]
        [System.ServiceModel.XmlSerializerFormatAttribute()]
        void ProcessingFault(ProcessingFault1 request);
    }

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
    [System.ServiceModel.MessageContractAttribute(IsWrapped = false)]
    [KnownType(typeof(TransactionHeader))]
    [KnownType(typeof(Document))]
    public partial class SendCreditTransferRequest
    {
        [System.ServiceModel.MessageHeaderAttribute(Namespace = "urn:eu:nets:realtime247:ri.2015.10.14")]
        public TransactionHeader TransactionHeader;
        [System.ServiceModel.MessageBodyMemberAttribute(Name = "SendCreditTransferRequest", Namespace = "urn:eu:nets:realtime247:ri.2015.10.14", Order = 0)]
        public Document SendCreditTransferRequest1;
        public SendCreditTransferRequest()
        {
        }
        public SendCreditTransferRequest(TransactionHeader TransactionHeader, Document SendCreditTransferRequest1)
        {
            this.TransactionHeader = TransactionHeader;
            this.SendCreditTransferRequest1 = SendCreditTransferRequest1;
        }
    }

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
    [System.ServiceModel.MessageContractAttribute(IsWrapped = false)]
    [KnownType(typeof(TransactionHeader))]
    [KnownType(typeof(ProcessingFault))]
    public partial class ProcessingFault1
    {
        [System.ServiceModel.MessageHeaderAttribute(Namespace = "urn:eu:nets:realtime247:ri.2015.10.14")]
        public TransactionHeader TransactionHeader;
        [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "urn:eu:nets:realtime247:ri.2015.10.14", Order = 0)]
        public ProcessingFault ProcessingFault;
        public ProcessingFault1()
        {
        }
        public ProcessingFault1(TransactionHeader TransactionHeader, ProcessingFault ProcessingFault)
        {
            this.TransactionHeader = TransactionHeader;
            this.ProcessingFault = ProcessingFault;
        }
    }
}

抱歉,我没有复制我创建的所有类...

【问题讨论】:

标签: c# wcf wcftestclient


【解决方案1】:

我在没有类声明的情况下测试了我的操作,广告这些工作正常。于是我一步步测试了SendCreditTransferRequest的子类,找到了问题的根源。 我在SendCreditTransferRequest 中使用AccountIdentification4Choice 子类,它是pacs.008.001.02(它是ISO20022)xsd 中的一个choise 对象。

<xs:complexType name="AccountIdentification4Choice">
  <xs:sequence>
    <xs:choice>
      <xs:element name="IBAN" type="IBAN2007Identifier"/>
      <xs:element name="Othr" type="GenericAccountIdentification1"/>
    </xs:choice>
  </xs:sequence>
</xs:complexType>

我是这样定义的:

[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:iso:std:iso:20022:tech:xsd:pacs.008.001.02")]
public partial class AccountIdentification4Choice
{
    private object itemField;
    [System.Xml.Serialization.XmlElementAttribute("IBAN", typeof(string), Order = 0)]
    [System.Xml.Serialization.XmlElementAttribute("Othr", typeof(GenericAccountIdentification1), Order = 0)]
    public object Item
    {
        get
        {
            return this.itemField;
        }
        set
        {
            this.itemField = value;
        }
    }
}

但它失败了。 所以新的问题是,如何在 WCF 服务中声明一个 choise 对象?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    相关资源
    最近更新 更多