2015-11-01 57 views
0

嘗試調用託管在Azure上的WCF服務,失敗並出現HTTP錯誤400. Web服務本質上充當我的Braintree(移動支付)服務器事物的一面。從Swift 2.0調用WCF(在Azure上)失敗,狀態碼爲400

下面是相關代碼:發生在

let soapEnvelope = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Header><Action s:mustUnderstand=\"1\" xmlns=\"http://schemas.microsoft.com/ws/2005/05/addressing/none\">http://tempuri.org/IService1/GenerateToken</Action></s:Header><s:Body><GenerateToken xmlns=\"http://tempuri.org/\" /></s:Body></s:Envelope>" 

let soapEnvelopeLength = String(soapEnvelope.characters.count) 

let clientTokenURL = NSURL(string: "http://xxx.xxx.net/Service1.svc") 
let clientTokenRequest = NSMutableURLRequest(URL: clientTokenURL!) 
let session = NSURLSession.sharedSession() 

clientTokenRequest.HTTPMethod = "POST" 
clientTokenRequest.HTTPBody = soapEnvelope.dataUsingEncoding(NSUTF8StringEncoding) 

clientTokenRequest.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type") 
clientTokenRequest.addValue(soapEnvelopeLength, forHTTPHeaderField: "Content-Length") 
clientTokenRequest.addValue("http://tempuri.org/IService1/GenerateToken", forHTTPHeaderField: "soapAction") 

let task = session.dataTaskWithRequest(clientTokenRequest, completionHandler: {data, response, error -> Void in 
    print(response) 
    let clientToken = String(data: data!, encoding: NSUTF8StringEncoding) 
    let brainTree = Braintree(clientToken: clientToken!) 

    if error != nil { 
     print(error) 
     } 
    }) 
task.resume() 

失敗:

let task = session.dataTaskWithRequest(clientTokenRequest, completionHandler: {data, response, error -> Void in 

我的SoapEnvelope幾乎是從WCF測試客戶端工具自動生成的XML的複製/粘貼。

我也試着用下面的SoapEnvelope,但仍得到一個400。結果clientToken保持零和B樹永遠不會初始化:

let soapEnvelope = "<?xml version=\"1.0\" encoding=\"utf-8\"><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><GenerateToken xmlns=\"http://tempuri.org/\" /></s:Body></s:Envelope>" 

任何想法?

感謝, 城邦

回答

0

監測與小提琴手交通後回答我的問題,我不得不SOAP信封改爲:

let soapEnvelope = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><GenerateToken xmlns=\"http://tempuri.org/\" /></s:Body></s:Envelope>" 

這個工作。

相關問題