Невозможно вызвать, потому что это веб-метод - PullRequest
1 голос
/ 26 марта 2012

полу Решено

Похоже, что проблема существует только при работе в режиме отладки, и только при запуске команд через окна непосредственного просмотра / наблюдения.

Просто так работает. Спасибо за ответы.


Я пытаюсь использовать службу WCF из приложения .net 2.0. Я добавил его как веб-ссылку, класс появился в 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 ]

1 голос
/ 26 марта 2012
[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); } 

Может быть, вы можете попробовать это вместо класса.

0 голосов
/ 26 марта 2012

Вы написали "Контракт" неправильно.

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

должно быть

[OperationContract]
    public List<string> GetStrings(int a, int b, int c)
0 голосов
/ 26 марта 2012

Можете ли вы хотя бы попытаться протестировать свой сервис с помощью SOAP UI, т.е. инструмента для тестирования и сервисов, размещенных на базовом http-связывании. Это определенно даст вам представление, если есть какие-либо проблемы?

0 голосов
/ 26 марта 2012

Я думаю, вы должны использовать WSE на стороне .NET 2.0.

Эта ссылка может вам помочь:

Совместимость между WCF и WSE 3.0

0 голосов
/ 26 марта 2012

.Net 2.0 - это среда выполнения.Поэтому я предполагаю, что когда вы говорите .Net 2.0 Enterprise Edition, вы говорите о наборе инструментов Visual Studio (Visual Studio 2005).


WCF впервые появился в .Net 3.- так.Net 2.0 не имеет WCF.Однако вы можете установить .Net 3.0 поверх вашей установки .Net 2.0 и начать использовать WCF.

...