2016-04-21 102 views
0

我有一個輸入參數的Web服務。在WSDL中的相關XSD低於Web服務的日期格式問題

enter image description here

當我加入此WSDL作爲在Visual Studio服務引用,它產生了一類具有作爲System.DateTime相應的字段。下面是增加了對WSDL參考類領域

private System.Nullable<System.DateTime> startDateField; 

我結合服務,創建客戶端CustomBinding下面

protected CustomBinding GetCustomBinding() 
    { 
     var customBinding = new CustomBinding() { Name = "CustomBinding" }; 

     customBinding.Elements.Add(new TextMessageEncodingBindingElement() { MessageVersion = MessageVersion.Soap11 }); 
     var securityBindingElement = SecurityBindingElement.CreateUserNameOverTransportBindingElement(); 
     securityBindingElement.AllowInsecureTransport = true; 
     securityBindingElement.EnableUnsecuredResponse = true; 
     securityBindingElement.IncludeTimestamp = false; 
     customBinding.Elements.Add(securityBindingElement); 
     customBinding.Elements.Add(new HttpTransportBindingElement()); 

     return customBinding; 
    } 

我的C#代碼分配輸入

myobject.input.endDate = Convert.ToDateTime(endDate); 
的一個例子

在分配輸入值後,我調用web方法在Fiddler中查看Request中缺少所有日期參數。

我試着在SoapUI中測試。它看起來像服務期望的格式yyyy-MM-dd日期,雖然類型是日期。只有當我提供格式爲yyyy-MM-dd的日期時,webservice纔會返回數據。

我不確定這是否與Web服務預期的日期格式有關。顯然,我不能以格式yyyy-MM-dd發送.Net生成的參考類具有DateTime而不是string數據類型。

我試圖強行將Specified爲true

myobject.input.endDate = Convert.ToDateTime(endDate).Date; 
myobject.input.endDateSpecified = true; 

我得到了下面的錯誤:

A value was being set that exceeded the maximum allowable field length. 

現在,我懷疑是網絡服務預計日期,但.NET是試圖發送日期時間這可能會延長其長度

+0

如果您使用的是WSDL,那麼您可能具有帶DateTime屬性的對象?只需設置屬性,它應該沒問題。如果您忽略了WSDL並編寫自己的序列化程序,那麼您可以使用自定義格式化程序「ToString」日期。考慮到這一切,不清楚你的問題是什麼 – PaulG

+0

@PaulG - 我使用Add Service Reference選項將WSDL添加到我的項目中; .Net生成一個與WSDL匹配的類來與Web服務交互;當我指定日期並調用方法時,我沒有看到Request中的日期參數轉到Web服務;我相信這顯然是與日期格式有關的。但不知道該怎麼做 – techspider

+1

調試你的代碼以確保myobject.input.endDate的賦值實際上被執行,並且myobject.input.endDate之後有一些有效的內容。 – NineBerry

回答

2

它看起來像我最後的代碼工作,但錯誤是由於另一個領域。

myobject.input.endDate = Convert.ToDateTime(endDate).Date; 
myobject.input.endDateSpecified = true;