保存客户端代理的位置

时间:2012-07-13 20:29:13

标签: asp.net wcf

我添加了对WCF服务的Web引用

我想修改由Web服务参考工具

自动生成的代理文件

我希望在每个方法引用之前添加,如

[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,

BodyStyle = WebMessageBodyStyle.Wrapped,

UriTemplate = "LogIn/{username}/{password}")]

任何想法如何做到

祝你好运

2 个答案:

答案 0 :(得分:1)

您好:

我添加此内容,因为上面的帖子并没有明确说明如何在客户端代理代码中添加WebInvoke属性,因此我可以将其用于清除任何关于其如何完成的混淆

第1步

转到VS项目文件夹并找到您的"服务参考"夹。找到您正在使用的Reference文件夹,如果在添加服务时使用默认文件夹,则应该类似于" ServiceReference1"。

在该文件夹中有一个Reference.cs文件,这是您更新方法所需的文件。

例如,假设您创建了一个REST服务,并且省略了WebInvoke属性。你可以在那里添加它们。

第2步

找到以&#34开头的行; [System.ServiceModel.OperationContractAttribute":

应该看起来像这样

[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/YourMethodName", ReplyAction="http://tempuri.org/IService1/YourMethodNameResponse")]

第3步

现在,在该行之后,您要添加如下所示的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>