我添加了对WCF服务的Web引用
我想修改由Web服务参考工具
自动生成的代理文件我希望在每个方法引用之前添加,如
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "LogIn/{username}/{password}")]
任何想法如何做到
祝你好运
答案 0 :(得分:1)
您好:
我添加此内容,因为上面的帖子并没有明确说明如何在客户端代理代码中添加WebInvoke属性,因此我可以将其用于清除任何关于其如何完成的混淆
转到VS项目文件夹并找到您的"服务参考"夹。找到您正在使用的Reference文件夹,如果在添加服务时使用默认文件夹,则应该类似于" ServiceReference1"。
在该文件夹中有一个Reference.cs文件,这是您更新方法所需的文件。
例如,假设您创建了一个REST服务,并且省略了WebInvoke属性。你可以在那里添加它们。
找到以&#34开头的行; [System.ServiceModel.OperationContractAttribute":
应该看起来像这样
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/YourMethodName", ReplyAction="http://tempuri.org/IService1/YourMethodNameResponse")]
现在,在该行之后,您要添加如下所示的WebInvoke代码:
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/YourMethodName", ReplyAction="http://tempuri.org/IService1/YourMethodNameResponse")]
[System.ServiceModel.Web.WebInvoke(Method = "POST", BodyStyle = System.ServiceModel.Web.WebMessageBodyStyle.WrappedRequest, RequestFormat = System.ServiceModel.Web.WebMessageFormat.Json, ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json, UriTemplate = "/YourMethodName")]
这就是它的所有内容。
注意:如果您删除了WCF服务引用,那么您所做的更改将会消失。因此,请确保在完成更改后备份文件。
答案 1 :(得分:0)
更新回答:
您似乎已使用VS中的“添加服务引用”对话框创建了代理代码。 VS ASR对话框不完全支持WCF REST,因此,代理代码缺少[WebInvoke]属性。您可以尝试在客户端代理中添加[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
属性吗?
资源:
WCF Service Proxy throws exception when more than one parameter is used in [OperationContract] method
如果我清楚地理解你的问题。 如果要在每个方法之前添加WebInvoke属性,请转到WCF服务接口类(IService.cs)。可能是它放在你的App_Code文件夹中。
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Wrapped,UriTemplate = "LogIn/{username}/{password}")]
void DoWork();
}
如果要更改代理类设置,请转到system.ServiceModel标记下的Web配置。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:56662/WebSite2/Service.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService"
contract="ServiceReference1.IService" name="BasicHttpBinding_IService" />
</client>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>