2010-06-06 4 views
0

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

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

Service: [OperationContract] 
      int GetInt(); 

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

Не могли бы вы помочь мне сделать schame не изменяющийся в обоих WCF clinet и не 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

ответ

0

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

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

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

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

Это очень странно, как вы пытаетесь поставить DataMember (поле, которое должно быть сериализован через для службы) в классе, который реализует сервис .....

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

Смежные вопросы