2015-11-04 102 views
3

我創建了以下測試應用程序以檢索Service Now中的數據。Web服務沒有以正確的格式返回數據

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.ComponentModel; 

namespace ServiceNowConnection 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Service_Now_Reference.getRecords records = new Service_Now_Reference.getRecords(); 
      records.sys_user = "XXXXXXX"; 

      Service_Now_Reference.ServiceNowSoapClient proxyUser = new Service_Now_Reference.ServiceNowSoapClient(); 
      proxyUser.ClientCredentials.UserName.UserName = "XXXXXX"; 
      proxyUser.ClientCredentials.UserName.Password = "XXXXXX"; 
      Service_Now_Reference.getRecordsResponseGetRecordsResult[] result = proxyUser.getRecords(records); 

      foreach (var item in result) 
      { 
       Console.WriteLine(item.sys_created_by); 
      } 
      Console.ReadLine(); 
     } 

    } 
} 

這現在正確連接到服務應用程序沒有錯誤,但是當我嘗試打印檢索到的數據它給了我鑰匙,而不是字符串類型的答案。

enter image description here

對於某些屬性它給正確的值(例如sys_updated_by)

enter image description here

我怎樣才能避免這種情況。

+0

嗨Sandaru,你能提供一些更多的細節嗎?具體的URL是你要求嗎? HTTP請求是什麼樣的?您是否從WSDL生成ServiceNowSoapClient? – Bryan

+0

yah即時通訊使用WSDL。該網址是https://XXXXXXXX.service-now.com/service_subscribe_sys_user_list.do?WSDL – Sandaru

+1

謝謝,仍然可以使用更多的信息來說肯定,但我猜測更新你拉WSDL的URL包括'displayvalue = all'(參考:http://wiki.servicenow.com/?title= Direct_Web_Services#Return_Display_Value_for_Reference_Variables)將有所幫助。如果您可以捕獲您的C#應用​​程序發送的示例HTTP請求並將其包含在此處的問題中,它也將有所幫助。如果你這樣做,請確保你刪除標題中的任何憑據。 – Bryan

回答

3

,你需要做的方式。

如果您在C#中使用RESTfull API,可以通過直接向服務發送直接HTTPS調用來完成。

但事情當您使用SOAP API

當你輸入的Web服務程序,它包括以下根據您的申請意向XML代碼在app.config或Web.config文件(Web應用程序變得複雜或獨立應用程序)。

<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
    <binding name="ServiceNowSoap"> 
     <security mode="Transport" /> 
    </binding> 
    <binding name="ServiceNowSoap1" /> 
    </basicHttpBinding> 
</bindings> 
<client> 
    <endpoint address="https://XXXXXXXX.service-now.com/service_subscribe_sys_user_list.do?SOAP" 
    binding="basicHttpBinding" bindingConfiguration="ServiceNowSoap" 
    contract="ServiceReference1.ServiceNowSoap" name="ServiceNowSoap" /> 
</client> 
</system.serviceModel> 

首先,如果您希望檢索一大組記錄,則需要增加最大接收郵件大小的大小。

爲你需要編輯標籤像下面

<binding name="ServiceNowSoap" maxReceivedMessageSize="2000000000"> 

接下來的部分是增加displayvalue =所有的URL。

我們不能用自己的XML編輯端點url,而是可以刪除URL並將其添加爲關鍵值。但你仍然不能添加URL參數與&標誌你需要的值存儲作爲單獨的按鍵,並結合其withing程序獲取完整URL

最終XML會是這樣

<configuration> 
    <appSettings> 
    <add key="serviceNowUrl" 
    value="https://XXXXXXXX.service-now.com/service_subscribe_sys_user_list.do?"/> 
    <add key="displayvalue" value="displayvalue=true"/> 
    <add key="protocol" value="SOAP"/> 
    </appSettings> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="ServiceNowSoap" maxReceivedMessageSize="2000000000"> 
        <security mode="Transport"> 
         <transport clientCredentialType="Basic" proxyCredentialType="Basic" 
         realm=""> 
          <extendedProtectionPolicy policyEnforcement="Never" /> 
         </transport> 
         <message clientCredentialType="UserName" algorithmSuite="Default" /> 
        </security> 
       </binding> 
       <binding name="ServiceNowSoap1" /> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint binding="basicHttpBinding" bindingConfiguration="ServiceNowSoap" 
      contract="Service_Now_Reference.ServiceNowSoap" name="ServiceNowSoap" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

你可以請按如下步驟組裝url:

string url = ConfigurationSettings.AppSettings["serviceNowUrl"]; 
    string protocol = ConfigurationSettings.AppSettings["protocol"]; 
    string displayvalue = ConfigurationSettings.AppSettings["displayvalue"]; 

    System.ServiceModel.EndpointAddress endpoint = new System.ServiceModel.EndpointAddress(string.Format("{0}{1}{2}", url, protocol, displayvalue)); 
相關問題