2015-10-15 17 views
6

Windows evrensel uygulamasında çift taraflı sözleşmeli wcf hizmetini nasıl kullanabilirim? (; 10240 Yapı 10.0) o API desteklenmektedir msdn göreWindows Evrensel Uygulaması'nda dupleks wcf hizmeti nasıl kullanılır?

, Windows 10 hedefleyen Windows Evrensel Uygulaması'nda dubleks wcf hizmeti tüketmeye çalışırken

Ben PlatformNotSupportedExcetpion: Operation is not supported on this platform. çalışma zamanı özel alıyorum.

Bu mümkün değilse, senaryona nasıl devam etmeliyim? Aynı makinede iki uygulama (konsol ve windows universal xaml uygulaması) var ve iki yönlü iletişime ihtiyacım var.

var host = new ServiceHost(typeof(MyService), new Uri("net.tcp://localhost:8008/MyService")); 

var binding = new NetTcpBinding(); //I've also tried net http binding 
binding.Security.Mode = SecurityMode.None; 

host.Description.Behaviors.Add(new ServiceMetadataBehavior()); 
host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, 
         MetadataExchangeBindings.CreateMexTcpBinding(), 
         "mex"); 

host.AddServiceEndpoint(typeof(IMyService), binding, ""); 
host.Open(); 

hizmet sözleşmesi: Ben hem ChannelFactory denenmiş ve Servis Referans ekle tarafından istemci WCF yarattı

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))] 
public interface IMyService 
{ 
    [OperationContract(IsOneWay = true)] 
    void Initialize(); 
} 

public interface IMyServiceCallback 
{ 
    [OperationContract(IsOneWay = true)] 
    void OnFrame(int i); 
} 

Hizmetin konukçu yaratmak olduğunu, klasik .net 4.6 konsol uygulaması var iletişim kutusu ve UWP uygulamasında hem NetHttpBinding hem de NetTcpBinding.

wcf istemcisinin örneğini oluşturmaya çalıştığımda, PlatformNotSupportedExcetpion'u atar.

Kaynak: System.Private.ServiceModel

StackTrace:

at System.ServiceModel.ReflectionExtensions.GetInterfaceMap(Type type, Type interfaceType) 
    at System.ServiceModel.Description.TypeLoader.GetIOperationBehaviorAttributesFromType(OperationDescription opDesc, Type targetIface, Type implType) 
    at System.ServiceModel.Description.TypeLoader.<>c__DisplayClass8.<AddBehaviorsFromImplementationType>b__10(Type currentType, KeyedByTypeCollection`1 behaviors) 
    at System.ServiceModel.Description.TypeLoader.AddBehaviorsAtOneScope[IBehavior,TBehaviorCollection](Type type, TBehaviorCollection descriptionBehaviors, ServiceInheritanceCallback`2 callback) 
    at System.ServiceModel.Description.TypeLoader.AddBehaviorsFromImplementationType(ServiceEndpoint serviceEndpoint, Type implementationType) 
    at System.ServiceModel.ChannelFactory`1.ReflectOnCallbackInstance(ServiceEndpoint endpoint) 
    at System.ServiceModel.ChannelFactory`1.CreateDescription() 
    at System.ServiceModel.ChannelFactory.InitializeEndpoint(Binding binding, EndpointAddress address) 
    at System.ServiceModel.DuplexChannelFactory`1..ctor(Object callbackObject, Binding binding, EndpointAddress remoteAddress) 
    at System.ServiceModel.ClientBase`1..ctor(InstanceContext callbackInstance, Binding binding, EndpointAddress remoteAddress) 
    at System.ServiceModel.DuplexClientBase`1..ctor(InstanceContext callbackInstance, Binding binding, EndpointAddress remoteAddress) 
    at App1.ServiceReference1.MyServiceClientBase..ctor(InstanceContext callbackInstance) 
    at App1.ServiceReference1.MyServiceClient..ctor(MyServiceClientCallback callbackImpl) 
    at App1.ServiceReference1.MyServiceClient..ctor() 
    at App1.MainPage.<button_Click>d__1.MoveNext() 
+0

Bir dubleks 'net.tcp' WCF hizmetine bağlanmak için mükemmel bir şekilde çalışan bir UWP istemci uygulamasına sahibim. Projeyi Windows10'a geçtikten sonra sıfırdan yeniden oluşturdum ve şimdi aynısını 'PlatformNotSupportedException' alıyorum. – jsanalytics

+0

Bu özel çözümde 23 projem var. Hepsi yeni oluşturulmuş UWP projesi haricinde, "AnyCPU" platformunu kullanmaktadır, sadece x86 veya x64 platformlarını kabul eder/izin verir, ancak AnyCPU'yu kabul etmez. Yani sanırım sorun şu andan geliyor. Ben el ile .... AnyCPU ekleyerek proje dosyaları ile uğraşmaya çalıştı .... ama iyi gitmedi, elbette. Ve yine, bu Windows 8.1 altında hiçbir sorun ile çalışmak için kullanılır. UWP proje şablonuyla veya bu tür bir şeyle ilgili bir sorun olabilir. – jsanalytics

+0

Başka bir konudaki biri bunu not etti. CallbackContract özniteliğini kaldırdıktan sonra UWP istemcisi bir bağlantı oluşturabilir, bu nedenle temel WCF çalışır. Daha sonra bir UWP –

cevap

0

Dubleks senaryo 10580 build (en son .NETCore v5.1.0) bile desteklenmemektedir.

WCF dupleks uygulamasında yanlış yansıma kullanımı hakkında iyon GitHub bildirilen bir hata oluştu. Bu hata .net çekirdeği için en son sürümde düzeltildi ve Nuget galerisinden individual package'u dahil edebilirsiniz. Ancak, bu paket, System.Runtime ve System.Threading öğelerinin yayın öncesi sürümlerini de eklemenizi gerektirir.

enter image description here

sadece geçen ay serbest bırakıldı yardımcı .NET Çekirdek 1.0 parçası olarak WCF

İlgili konular