0

私はBizTalk2009統合の反対側にいて、次のような非常に単純な契約を立てています。

[ServiceContract(Name = "ReceiverService", Namespace = "http://services.company.org/")]
public interface IReceiverService : ILoadBalanced
{
 [OperationContract]
 void FinishedRouting(long applicationId);

 [OperationContract]
 void ResponsePending(long applicationId, string stringId, short count);

 [OperationContract]
 void ReportException(long applicationId, string errorMessage, string stringId);

 [OperationContract]
 void SaveResponse(WebResponseDto decision);
}

ただし、BizTalkグループがWCF Service Consuming Wizardを使用しようとすると、チョークして次のスタックトレースを提供します。

[5096] System.NullReferenceException: Object reference not set to an instance of an object. 
[5096]    at Microsoft.BizTalk.Adapter.Wcf.Consuming.Exporters.BindingInfoExporter.CreatePrimaryTransport(ServiceEndpoint serviceEndpoint, Boolean custom) 
[5096]    at Microsoft.BizTalk.Adapter.Wcf.Consuming.Exporters.BindingInfoExporter.CreateSendPort(ServiceEndpoint endpoint, Port port, Boolean custom) 
[5096]    at Microsoft.BizTalk.Adapter.Wcf.Consuming.Exporters.BindingInfoExporter.Export(ServiceEndpointCollection endpoints, ServiceDescriptionCollection wsdlDocuments, Boolean custom) 
[5096]    at Microsoft.BizTalk.Adapter.Wcf.Consuming.Consumer.CreateBindingFiles(MetadataSet metadataSet, String serviceName) 

そして再びここに:

[5096] System.NullReferenceException: Object reference not set to an instance of an object. 
[5096]    at Microsoft.BizTalk.Adapter.Wcf.Consuming.Implementation.ClientImplementation.AddFilesToProject(String schemaNamespace) 
[5096] System.NullReferenceException: Object reference not set to an instance of an object. 
[5096]    at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) 
[5096]    at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) 
[5096]    at Microsoft.BizTalk.Adapter.Wcf.Consuming.Consumer.Consume(ISynchronizeInvoke synchronizeInvoke, DTE dte, MetadataSet metadataSet, Project project, String importNamespace) 

誰もがこれをどこから探し始めるか知っていますか?

4

2 に答える 2

1

これらに似ている可能性があります-ここここ、つまり:

  • WCF クライアントに対して svcutil.exe や wsdl.exe を使用して、非 BizTalk クライアントでプロキシを生成できるようにします。
  • すべての WSDL をチェックして、すべての要素のターゲット名前空間が存在することを確認します。インスタンスでは、基本コントラクト (ILoadBalanced) とエンティティ (WebResponseDto) も忘れずにチェックしてください。

単純な WCF サービス (基本インターフェイスなし、1 つの操作、文字列入力、文字列戻り) で WCF 消費ウィザードを使用できることを確認できますか? そうでない場合は、VS IDE が破損している可能性があります。

FWIW void が返されることは問題ではないようです。BTS は void 操作に対して次の応答スキーマを作成します。

  <xs:element name="GetDataResponse">
    <xs:complexType>
      <xs:sequence />
    </xs:complexType>
  </xs:element>

また、Contract インターフェイスと Base Contract インターフェイスを別の名前空間に配置することも問題ありませんでした。

ただし、シリアル化できないプロパティを DTO/エンティティに追加すると、svcutil と BizTalk WCF ウィザードの両方が失敗しました

HTH

namespace WcfService1
{
    [ServiceContract(Namespace = "http://someorl.org/ns1")]
    public interface IBase
    {
        [OperationContract]
        void SomeBaseMethod(int value);
    }

    [ServiceContract(Namespace = "http://someorl.org/ns2")]
    public interface IService1 : IBase
    {

        [OperationContract]
        void GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: Add your service operations here
    }


    // Use a data contract as illustrated in the sample below to add composite types to service operations.
    [DataContract]
    public class CompositeType
    {
        bool boolValue = true;
        string stringValue = "Hello ";

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }

        //[DataMember]
        //public XmlDocument NonSerializable
        //{
        //    get;
        //    set;
        //}
    }
}
于 2010-09-15T08:11:40.457 に答える
0

WCF クライアント アプリケーションは、一方向の操作でサービス コントラクトを使用して、メッセージを WCF の受信場所に送信することはできません。クライアント側コントラクトの操作には、IsOneWay=false および ReplyAction=”*” の注釈を付ける必要があります。唯一の例外は、NetMsmqBinding を使用している場合です。この場合、クライアント コントラクトのすべての操作は一方向である必要があります。

于 2010-09-14T19:32:52.153 に答える