无法调用,因为它是一个Web方法

时间:2012-03-26 12:26:59

标签: c# wcf web-services

已解决

看来问题仅在调试模式下运行时存在, 并且只有在通过立即/观察窗口运行命令时才会这样做。

它只是这样工作。 谢谢你的回答。


我正在尝试从.net 2.0应用程序中使用WCF服务。 我已将其添加为Web引用,该类出现在intellisense中。 但是,从服务调用方法会返回错误  Cannot call <method> because it is a web method

服务

[ServiceContract]
[AspNetCompatibilityRequirments(RequirmentsMode = ApsNetCompatibilityRequirments.Allowed)]
public class ConsumerResponder
{
    [OperationConract]
    public List<string> GetStrings(int a, int b, int c)
    {
        return new List<string>{"hi"};
    }
}

服务web.config

<?xml version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>

    <system.ServiceModel>

        <behaviors>
            <endpointBehaviors>
                <behavior name="bh1">
                    <endpointDiscovery enabled="true" />
                </behavior>
            </endpointBehaviors>

            <serviceBehaviors>
                <behavior>
                    <serviceDebug includeExceptionDetailInFaults="true" />
                    <serviceMetada httpGetEnabled="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>

        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

        <services>
            <service name="Service.ConsumerResponder">
                <endpoint address="" behaviorConfiguration="bh1" binding="basicHttpBinding" contract="Service.ConsumerResponder" />
                <endpoint address="mex" binding="wsHtppBinding" contract="IMetadataExchange" />
            </service>
        </services>
    </system.ServiceModel>
</configuration>

用法

using(ConsumerResponder cf = new ConsumerResponder())
{
    List<string> result = cf.GetStrings(1, true, 2, true, 3, true);
}

从其他地方和调试中测试,服务确实返回值。

5 个答案:

答案 0 :(得分:1)

[ServiceContract] 
[AspNetCompatibilityRequirments(RequirmentsMode = ApsNetCompatibilityRequirments.Allowed)] public interface IConsumerResponder { 
    [OperationConract]   
    public List<string> GetStrings(int a, int b, int c);
} 

public class ConsumerResponder:IConsumerResponder
{
   public List<string> GetStrings(int a, int b, int c) {  
       return new List<string>;     }
}

using(ConsumerResponder cf = new ConsumerResponder()) {    
 List<string> = cf.GetStrings(1,2,3); } 

可能你可以试试这个而不是上课。

答案 1 :(得分:0)

.Net 2.0是运行时。所以我假设当你说.Net 2.0企业版时,你在谈论Visual Studio工具集(Visual Studio 2005)。


WCF首次出现在.Net 3.-所以.Net 2.0没有WCF。但是,您可以在.Net 2.0安装之上安装.Net 3.0并开始使用WCF。

答案 2 :(得分:0)

我认为你应该在.NET 2.0端使用WSE

此链接可以帮助您:

Interoperability between WCF and WSE 3.0

答案 3 :(得分:0)

您是否至少尝试使用SOAP UI测试您的服务,即在基本http绑定上托管的测试和服务工具。如果有任何问题,它肯定会让你知道吗?

答案 4 :(得分:0)

你拼错了“合同”。

[OperationConract]
    public List<string> GetStrings(int a, int b, int c)

应该是

[OperationContract]
    public List<string> GetStrings(int a, int b, int c)