我有一个客户端(使用ASMX“添加Web引用”创建)。该服务是WCF。方法的签名因客户端和服务而异。我得到了一些不需要的参数。
注意:我对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;
}
}
}
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 :(得分:0)
我认为你不能做太多让这个“不变” - 这就是从WCF服务生成ASMX客户端的东西的方式。每个客户端堆栈与另一个堆栈有点不同,并且可能以稍微不同的方式解释WSDL中的服务契约。你能做的就不多了......
如果您不想这样做 - 请改为创建一个WCF客户端。
旁边的评论:
public class NameDecorator : IElementaryService
{
[DataMember(IsRequired=true)]
int resultIntVal = 1;
非常奇怪您是如何尝试将DataMember
(应该为服务序列化的字段)放入实现服务.....
您应该将服务合同(接口IElementaryService
),服务实施(类NameDecorator
)和您的数据合同(其他类)分开 - 执行不混合数据合同和服务实施 - 这肯定会以某种方式适得其反......