这是我第一次创建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;