2010-06-06 18 views
0

我有一个客户端(使用ASMX“添加Web引用”创建)。该服务是WCF。方法的签名因客户和服务而异。我得到了一些不需要的参数。使用WCF服务时,ASMX架构有所不同

注意:我对DataMember使用了IsRequired = true。

Service: [OperationContract] 
      int GetInt(); 

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

请问我能否让WCF clinet和非WCF客户端中的schame不变?我们有什么最佳做法吗?

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; 
      } 
     } 

} 

绑定= “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)和你的数据契约(其他类)分开 - 这样做不是混合数据合同和服务实施 - 这肯定会逆火......