我正嘗試創建一個以Azure Web角色託管的WCF服務。該服務必須能夠通過肥皂和休息到達。無法通過郵政到達WCF休息端點
我一直在閱讀一些文章,並能夠創建(或至少我是這麼認爲)所有規格的服務。
我試圖做的是要消耗我的REST端點用了SoapUI項目,做與所有參數的查詢字符串一個帖子,但是當我運行這個項目,我得到的迴應是:
服務器在處理請求時遇到錯誤。異常消息是'錯誤反序列化操作'CPlano'的請求消息體。 OperationFormatter無法反序列化消息中的任何信息,因爲消息是空的(IsEmpty = true)。'
這裏是我的web.config的一部分:
<bindings>
<webHttpBinding>
<binding name="webBinding" maxReceivedMessageSize ="50000000" maxBufferPoolSize="50000000">
<readerQuotas maxDepth="500000000" maxArrayLength="500000000" maxBytesPerRead="500000000"
maxNameTableCharCount="500000000" maxStringContentLength="500000000"/>
<security mode="None" />
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="RestBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="Namespace.CService" behaviorConfiguration="ServiceBehavior">
<endpoint name="RESTEnpoint" contract="Namespace.ICService" binding="webHttpBinding" bindingConfiguration="webBinding" bindingNamespace="http://www.example.com/" address="rest" behaviorConfiguration="RestBehavior" />
<endpoint name="SOAPEndpoint" contract="Namespace.ICService" binding="basicHttpBinding" bindingNamespace="http://www.example.com/" address=""></endpoint>
</service>
</services>
而且,這裏是我的服務接口聲明:
[ServiceContract(Namespace = "http://www.example.com/")]
public interface ICService
{
[OperationContract]
[WebInvoke(UriTemplate = "/CPlano",
BodyStyle = WebMessageBodyStyle.Wrapped,
Method = "POST")]
RespuestaCotizador CPlano(int idUsuario, string usuario, string pass, int modalidad, int servicio,
int medicion, string paisDestino, int envio, decimal peso, decimal largo, decimal ancho, decimal alto);
}
最後我響應等級:
[DataContract(Namespace = "http://www.example.com/")]
public class RespuestaCotizador
{
[DataMember]
public bool HasError;
[DataMember]
public string ErrorMessageESP;
[DataMember]
public string ErrorMessageENG;
[DataMember]
public decimal PrecioCotizado;
public RespuestaCotizador()
{
HasError = false;
ErrorMessageESP = string.Empty;
ErrorMessageENG = string.Empty;
PrecioCotizado = 0;
}
}
我使用統一進行依賴注入,但這似乎是n有關。
即使我在本地運行服務,我甚至可以達到第一個斷點。
鑑於您看到的異常消息,我不知道SoapUI是否正確設置了對該服務的調用。 WCF正在接收消息並嘗試將傳入消息更改爲CPlano對象,但由於它認爲該消息不包含任何信息而失敗。您是否嘗試過使用Visual Studio附帶的WCFTestClient.exe甚至是單獨的項目來測試您的服務? SoapUI以外的其他東西排除了SoapUI成爲問題? 此外,嘗試在模擬器外部運行Web項目(將其設置爲啓動項目)以排除Azure。 – MikeWo 2012-07-23 23:57:31
嗨!我嘗試過使用WCFTestClient ...但我認爲它只使用soap端點來調用服務......使用此工具,我從服務中收到了正確答案。 – user1547073 2012-07-24 00:13:09
是的,你和Ming Xu是對的,WCFTest客戶端不測試REST端點,但是如果SOAP端點正確回答,那麼你已經排除了服務本身的問題,現在你只需要查看REST端點或調用者是問題。當你使用不同的工具時會發生什麼(像Ming建議的提琴手,甚至是另一個項目)? – MikeWo 2012-07-27 11:36:45