有关WCF服务中的WebInvoke BodyStyle的问题

时间:2018-10-02 00:40:14

标签: c# wcf

这是我第一次创建WCF服务。我有一个关于消费的问题。在客户端应用程序中,出现错误,建议我这样做:

  

“指定多个请求主体参数,无需任何包装器元素即可进行序列化。最多一个主体参数可以在不具有包装器元素的情况下进行序列化。要么删除多余的主体参数,要么将WebGetAttribute / WebInvokeAttribute上的BodyStyle属性设置为Wrapped”。 >

我建议更改服务中的BodyStyle。但是错误仍然存​​在。如果我使用httpWebRequest发送请求,则没有问题。有人可以告诉我如何在客户端应用程序中使用WCF方法吗?

这是服务:

[OperationContract]
    [WebInvoke(Method = "GET",
       ResponseFormat = WebMessageFormat.Xml,
       BodyStyle = WebMessageBodyStyle.Bare,                  
       UriTemplate = "AvailableByLocation?locationID={locationID}&TypeID={TypeID}")]
       AvailableByLocation AvailableShippingDatesByLocation(Int64 locationID, Int64 TypeID);

这是客户端应用代码:

ServiceReference1.BookingClient client = new ServiceReference1.BookingClient();
        Int64 locationID = 1001;
        Int64 TypeID = 2600;
        AvailableDatesByLocation obj=client.AvailableShippingDatesByLocation(locationID, TypeID);

我在客户端应用配置文件中添加了以下代码:

 <system.serviceModel>
   <bindings>
     <basicHttpBinding>
       <binding name="BasicHttpBinding_IBooking"/>
       </basicHttpBinding>
    </bindings>
   <client>

      <endpoint address="http://localhost:58826/Booking.svc"     binding="webHttpBinding"  contract="ServiceReference1.IBooking" behaviorConfiguration="webEndpoint">
    </endpoint>
 </client>
 <behaviors>
   <endpointBehaviors>
      <behavior name="webEndpoint">
         <webHttp defaultBodyStyle="Bare" 
                 defaultOutgoingResponseFormat="Xml" 
                 helpEnabled="true"/>
    </behavior>
   </endpointBehaviors>
 </behaviors>

如果使用下面的代码,我可以获得结果:

string serviceUrl = "http://localhost:58826/Booking.svc/AvailableByLocation?locationID=";
        serviceUrl = serviceUrl + txtLocationID.Text.ToString() + "&TypeID=" + txtType.Text.ToString();   
        string result = "";


        HttpWebRequest request = WebRequest.Create(serviceUrl) as HttpWebRequest;

        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {

            StreamReader reader = new StreamReader(response.GetResponseStream());            
            result = reader.ReadToEnd();
        }      
        lbl.Text = result;

0 个答案:

没有答案