如何为Silverlight和.net生成WCF .cs文件?
本文关键字:WCF cs 文件 生成 net Silverlight | 更新日期: 2023-09-27 17:54:59
我目前使用Silverlight版本的svcutil为Silverlight生成。cs文件。我希望能够与。net 3.5共享这一点,但似乎有一些障碍。值得注意的是,ChannelBase似乎不存在于。net中,IHttpCookieContainerManager也不存在。是否有可能修改我的Service.cs,使两者都能读?(我不喜欢使用。config文件)
如果您不使用svcutil,您可以很容易地做到这一点。如果你的服务接口被Silverlight和。net 3.5共享,只需使用一些简单的代码在运行时创建一个客户端。
注意:你需要创建两个稍微不同的接口,因为Silverlight只支持异步通信。或者你可以使用相同的接口,并使用#if SILVERLIGHT
来告诉编译器在编译Silverlight代码时只编译文件的一部分,而在编译。net代码时只编译文件的另一部分。一个例子:
[ServiceContract(Namespace="http://www.example.com/main/2010/12/21")]
public interface IService
{
#if SILVERLIGHT
[OperationContract(AsyncPattern=true, Action = "http://www.example.com/HelloWorld", ReplyAction = "http://www.example.com/HelloWorldReply")]
IAsyncResult BeginHelloWorld(AsyncCallback callback, object state);
string EndHelloWorld(IAsyncResult result);
#else
[OperationContract(Action="http://www.example.com/HelloWorld", ReplyAction="http://www.example.com/HelloWorldReply")]
string HelloWorld();
#endif
}
这允许你在使用Silverlight时调用myClient.BeginHelloWorld()和myClient.EndHelloWorld(),或者在使用。net 3.5时只调用myClient.HelloWorld()。
如果你有很多自定义绑定,你也可以创建一个继承自CustomBinding的类,并让这个类在。net和Silverlight之间共享。该类的一个例子:
public class MyServiceBinding : CustomBinding
{
public MyServiceBinding()
{
BinaryMessageEncodingBindingElement binaryEncodingElement = new BinaryMessageEncodingBindingElement();
#if !SILVERLIGHT
binaryEncodingElement.ReaderQuotas.MaxArrayLength = int.MaxValue;
#endif
Elements.Add(binaryEncodingElement);
Elements.Add(new HttpTransportBindingElement() { MaxReceivedMessageSize = int.MaxValue });
}
}