2011-05-04 2 views
2

현재 Silverlight 버전의 svcutil을 사용하여 Silverlight 용 .cs 파일을 생성합니다. 나는 .NET 3.5와 이것을 공유 할 수 있기를 원하지만 몇 가지 장애물이있는 것 같다. 특히 ChannelBase는 .NET에는 존재하지 않으며 IHttpCookieContainerManager도 존재하지 않습니다. Service.cs를 모두 의사가 읽을 수 있도록 의사가 치료할 수 있습니까? (나는 .config 파일을 사용하지 않는 것을 선호한다.)Silverlight 및 .NET 용 WCF .cs 파일을 어떻게 생성합니까?

+0

각 솔루션의 Visual Studio에서 서비스 참조를 추가하고 VS에서 각각에 대해 .cs 파일을 만들지 마십시오. –

답변

1

svcutil을 사용하지 않으면 쉽게 할 수있다. Silverlight 및 .Net 3.5에서 서비스 인터페이스를 공유하는 경우 런타임에 클라이언트를 만들려면 simple code을 사용하십시오.

참고 : Silverlight는 비동기 통신 만 지원하므로 약간 다른 두 인터페이스를 만들어야합니다. 또는 동일한 인터페이스를 사용하여 Silverlight 코드를 컴파일 할 때 파일의 일부만 컴파일하고 .NET 코드를 컴파일 할 때 파일의 다른 부분 만 컴파일하도록 컴파일러에 알리기 위해 #if SILVERLIGHT을 사용할 수 있습니다. 예 :

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

이 실버 라이트를 사용하는 경우, 아니면 그냥 myClient.HelloWorld() 닷넷 3.5을 사용할 때 myClient.BeginHelloWorld()와 myClient.EndHelloWorld()를 호출 할 수 있습니다.

많은 맞춤 바인딩이있는 경우 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 }); 
    } 
} 
관련 문제