Схема ASMX меняется при использовании службы WCF - PullRequest
0 голосов
/ 06 июня 2010

У меня есть клиент (созданный с помощью ASMX «Добавить веб-ссылку»). Служба WCF. Подпись методов варьируется для клиента и Сервиса. Я получаю некоторые нежелательные параметры для метода.

Примечание. Я использовал IsRequired = true для DataMember.

Service:    [OperationContract]
            int GetInt();

Client:     proxy.GetInt(out requiredResult, out resultBool);

Не могли бы вы помочь мне сделать шейм неизменным как в клинике WCF, так и в клиенте, не являющемся WCF? Есть ли у нас лучшие практики для этого?

using System.ServiceModel;
using System.Runtime.Serialization;

namespace SimpleLibraryService
{
        [ServiceContract(Namespace = "http://Lijo.Samples")]
        public interface IElementaryService
        {
            [OperationContract]
            int GetInt();

            [OperationContract]
            int SecondTestInt();
        }

        public class NameDecorator : IElementaryService
        {
            [DataMember(IsRequired=true)]
            int resultIntVal = 1;

            int firstVal = 1;

            public int GetInt()
            {
                return firstVal;
            }

            public int SecondTestInt()
            {
                return resultIntVal;
            }
        }

}

Binding = "basicHttpBinding"

using NonWCFClient.WebServiceTEST;

namespace NonWCFClient
{
    class Program
    {
        static void Main(string[] args)
        {
            NonWCFClient.WebServiceTEST.NameDecorator proxy = new NameDecorator();

            int requiredResult =0;
            bool resultBool = false;
            proxy.GetInt(out requiredResult, out resultBool);
            Console.WriteLine("GetInt___"+requiredResult.ToString() +"__" + resultBool.ToString());

            int secondResult =0;
            bool secondBool = false;
            proxy.SecondTestInt(out secondResult, out secondBool);
            Console.WriteLine("SecondTestInt___" + secondResult.ToString() + "__" + secondBool.ToString());

            Console.ReadLine();
        }
    }
}

Пожалуйста, помогите ..

Спасибо

Lijo

1 Ответ

0 голосов
/ 06 июня 2010

Я не думаю, что вы можете сделать многое, чтобы сделать это "неизменным" - это просто способ, с помощью которого клиентская часть ASMX генерируется из службы WCF. Каждый стек на стороне клиента немного отличается от другого и может интерпретировать контракт на обслуживание в WSDL немного по-другому. С этим мало что можно сделать .....

Если вы не хотите этого - вместо этого создайте клиент WCF.

Замечание на стороне:

public class NameDecorator : IElementaryService
{
   [DataMember(IsRequired=true)]
   int resultIntVal = 1;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. ....

Вы должны хранить свой контракт на обслуживание (интерфейс IElementaryService), реализацию сервиса (класс NameDecorator) и ваши контракты на передачу данных (другие классы) раздельно - не не смешивать контракт данных и реализацию сервиса - это обязательно будет иметь неприятные последствия как-то ....

...