我正在實施BizTalk 2010 Saleforce集成,我純粹使用企業wsdl調用其方法。沒有任何操作的C#代碼。Biztalk 2010:無法通過企業WSDL查詢SalesForece.Illegal頭問題
我能夠成功地調用登錄方法並獲取所有細節的結果。現在在隨後的請求中,我調用的查詢方法不需要額外的參數來獲取標題。它只是將查詢字符串作爲參數顯示在下面。
<element name='query'>
<complexType>
<sequence>
<element name='queryString' type='string' />
</sequence>
</complexType>
</element>
現在的問題是,當我調用此方法它給我的「無效的會話及非法會話頭」錯誤,因爲沒有頭獲得通過。
替代方案,我試圖構造消息並傳遞標頭與會話標識(從登錄結果中獲取)顯式地如下所示。
Option 1.
varXMLDocument = new System.Xml.XmlDocument();
varXMLDocument.LoadXml("<ns0:Envelope xmlns:ns0='http://QuerySFDCVIAWSDL.QueryRequestSchema'><Body><query><queryString>SELECT "some fields xyz..." FROM Quote</queryString></query></Body></ns0:Envelope>");
msgSendQryToSalesforce = varXMLDocument;
//Setting Header
msgSendQryToSalesforce(WCF.Headers) = "<ns0:SessionHeader xmlns:ns0=\"urn:enterprise.soap.sforce.com\"><ns0:sessionId>" + SessionId + "</ns0:sessionId></ns0:SessionHeader>";
Option 2.
//Creating session header in same xml.
varXMLDocument.LoadXml("<ns0:Envelope xmlns:ns0='http://QuerySFDCVIAWSDL.QueryRequestSchema'><Header><SessionHeader><sessionId>"+SessionId+"</sessionId></SessionHeader></Header><Body><query><queryString>SELECT "some fields xyz..." FROM Quote</queryString></query></Body></ns0:Envelope>");
這些方法的問題是SessionHeader在運行時被刪除,只有查詢字符串傳遞給SFDC。因此得到相同的結果「無效會話和非法會話頭」。
//從編排調試程序請求,其中顯式傳遞後沒有會話頭,它只接受查詢字符串。
//Final Request
<ns0:query xmlns:ns1="urn:sobject.enterprise.soap.sforce.com" xmlns:ns0="urn:enterprise.soap.sforce.com"><ns0:queryString>SELECT "some fields xyz..." FROM Quote</ns0:queryString></ns0:query>
可有人請幫助我,幫助我找出合適的解決方案,以便在所有後續請求在會話頭中傳遞會話ID。
從SoapUI工具,當我傳遞相同的XML與會話頭它得到我的結果。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:enterprise.soap.sforce.com">
<soapenv:Header>
<urn:SessionHeader> <urn:sessionId>some id.......</urn:sessionId>
</urn:SessionHeader>
</soapenv:Header>
<soapenv:Body>
<urn:query>
<urn:queryString>Select "some fields xyz..." from Quote</urn:queryString>
</urn:query>
</soapenv:Body>
</soapenv:Envelope>
不能理解爲什麼從BizTalk它不起作用。
僅供參考我queryRequestSchema
Just FYI my queryRequestSchema
<?xml version="1.0"?>
<xs:schema targetNamespace="http://QuerySFDCVIAWSDL.QueryRequestSchema" xmlns="http://QuerySFDCVIAWSDL.QueryRequestSchema" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Envelope">
<xs:complexType>
<xs:sequence>
<xs:element name="Header">
<xs:complexType>
<xs:sequence>
<xs:element name="SessionHeader">
<xs:complexType>
<xs:sequence>
<xs:element name="sessionId" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="query">
<xs:complexType>
<xs:sequence>
<xs:element name="queryString" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
在此先感謝。
WCF.OutboundCustomHeaders爲我工作。謝謝大家,感謝你的迴應。 – 2015-02-07 16:30:37
太好了。如果您不介意,請將其標記爲答案,以便將來的用戶能夠更輕鬆地找到答案。謝謝。 – 2015-02-07 18:56:00