2010-12-01 9 views
4

私はSalesForce.comバルクAPIに接続しようとしていますので、アプリケーションから大量のデータをアップロードできます。私はPDF documentationを通してCURLを使ってPOST要求を行うことを強調しました。指示に沿って、サーバーにログインするためのXML形式のテキストファイルを作成しました。C#を使用してSalesForceバルクAPIに接続

以下

Login.txt内容:ここ

<?xml version="1.0" encoding="utf-8" ?> 
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <env:Body> 
    <n1:login xmlns:n1="urn:partner.soap.sforce.com"> 
      <n1:username>my username</n1:username> 
     <n1:password>my password</n1:password> 
    </n1:login> 
    </env:Body> 
</env:Envelope> 

私は、ログイン要求をするために私のコードでやろうとしているものです:

XmlDocument XMLResponse = null; 

HttpWebRequest httpRequest; 

HttpWebResponse httpResponse = null; 

Stream requestStream = null; 
Stream responseStream = null; 

XmlTextReader xmlReader; 

httpRequest = HttpWebRequest)WebRequest.Create("https://login.salesforce.com/services/Soap/c/20.0"); 

try 
{ 
      byte[] bytes = File.ReadAllBytes(filename); 
      httpRequest.Method = "POST"; 
      httpRequest.ContentLength = bytes.Length; 
      httpRequest.ContentType = "text/xml; charset=UTF-8"; 
      httpRequest.Headers.Add("SOAPAction: login"); 
      requestStream = httpRequest.GetRequestStream(); 
      requestStream.Write(bytes, 0, bytes.Length); 
      requestStream.Close(); 

      httpResponse = (HttpWebResponse)httpRequest.GetResponse(); 

      if (httpResponse.StatusCode == HttpStatusCode.OK) 
      { 
       responseStream = httpResponse.GetResponseStream(); 

       xmlReader = new XmlTextReader(responseStream); 

       XmlDocument xmldoc = new XmlDocument(); 
       xmldoc.Load(xmlReader); 

       XMLResponse = xmldoc; 
       xmlReader.Close(); 
      } 

      httpResponse.Close(); 
} 

このコードは、私は常に取得を実行する場合500エラー。誰かが私がやろうとしていることに何か経験を持っていますか?私にいくつかの提案をお願いしますか?

ありがとうございます。

答えて

3

ログイン部分については、パートナーWSDLをダウンロードしてインポートし、生​​成されたWebサービスクライアントを使用するだけです。それ以外の場合は、500のステータスコード(SOAP仕様では500のステータスコードを使用するにはフォルトメッセージが必要です)を受け取ったときに応答を読み取るようにコードを更新したい場合は、レスポンスボディが問題の手がかりを与えます。この場合、ID確認エラーが発生することが予想されます。ログインリクエストでは、パスワードに加えてAPIセキュリティトークンを指定する必要があります。

+0

Salesforceへログインするための次のC#コードを使用しますか?すぐに.GetResponse()が呼び出されると、InnerExceptionを持たないジェネリック500例外を持つ私のcatchブロックに送られます。 – Adam

+0

WebExceptionには、例外の場合に応答にアクセスするために使用できるResponseプロパティが含まれています。 – superfell

+0

提案をありがとう!ここで私が応答を調べると、「SOAPリクエストはSOAP 1.1を使用しなければならず、SOAP 1.1エンベロープをドキュメント・ルートとして受け取らなかった」という次のフォルト・メッセージが表示されます。私は実際にSOAPの使用経験がありませんので、私は上記のコードでこの問題を説明する何かを見ますか? – Adam

3

SalesforceのログインにXMLファイルを生成

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <login xmlns="urn:enterprise.soap.sforce.com"> 
     <username>username</username> 
     <password>password + token</password> 
    </login> 
    </soap:Body> 
</soap:Envelope> 

私は応答を読み取ることができますどのように

XmlDocument doc = new XmlDocument(); 
       doc.LoadXml(str); 
       string uri = "https://login.salesforce.com/services/Soap/c/21.0"; 
       HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 
       req.Headers.Add("SOAPAction", "login"); 
       req.ContentType = "text/xml;charset=\"utf-8\""; 
       req.Accept = "text/xml"; 
       req.Method = "POST"; 
       stm = req.GetRequestStream(); 
       doc.Save(stm); 
       stm.Close(); 
       WebResponse resp = req.GetResponse(); 
       stm = resp.GetResponseStream(); 
       XmlDocument doc1 = new XmlDocument(); 
       doc1.Load(stm); 
関連する問題