سؤال

وهكذا، ولدي خدمة WCF أن يتم الاستماع على حد سواء net.tcp وnet.pipe. لقد ولدت عميل وكيل WCF، وأود أن يكون قادرا على الاتصال عبر برنامج التعاون الفني أو إخراج مسمى. أنا لا أريد التكوين في app.config، ولكن في التعليمات البرمجية.

والعميل WCF سوف تحصل على عنوان نقطة النهاية في وقت التشغيل، لذلك شيء من هذا القبيل "net.tcp: // mymachine: 10001 / MyService" أو "net.pipe: // المضيف المحلي / MyService". أعتقد أن انها تريد فقط استخدام NetTcpBinding الصحيح أو NetNamedPipeBinding القائم قبالة مخطط أوري - لكنها لا تبدو على هذا النحو.

لا يمكن أنا وضعت للتو الوكيل لاتخاذ إما اسمه الأنابيب أو برنامج التعاون الفني الارتباطات، وانها سوف تختار واحدة استنادا إلى عنوان نقطة النهاية؟

وتحرير: حسنا، لذلك أنا شم مخطط وملء الربط:

var uri = new Uri("net.tcp://localhost:10001/MyService");
Binding b;
if (uri.Scheme == Uri.UriSchemeNetPipe) {
    b = new NetNamedPipeBinding();
} else if (uri.Scheme == Uri.UriSchemeNetTcp) {
    b = new NetTcpBinding();
} else if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps) {
    b = new WSHttpBinding();
}

var proxy = new ClientProxy(b, new EndpointAddress(uri));

ولكن أحصل على فشل الاتصال - <أنا> ". والهدف الاتصالات، System.ServiceModel.Channels.ServiceChannel، لا يمكن استخدامها للاتصال لأنه في ولاية انتقد"

إذا تغير ملزم لBindingElement، واستخدام NamedPipeTransportBindingElement، TcpTransportBindingElement، وما إلى ذلك مع CustomBinding يعمل ... ولكن لست متأكدا من أنني أفهم ما هو الفرق.

هل كانت مفيدة؟

المحلول

لا، لا يمكنك. يمكن أن يكون هناك سوى عنصر واحد في نقل الربط، وجود أكثر من واحد فقط لا معنى له.

وسيكون لديك للنظر في هذا المخطط، ومن ثم بناء على ذلك، اختر الربط صحيح. انها بسيطة بما فيه الكفاية للقيام، وذلك باستخدام الطبقة أوري، التي من شأنها أن تؤدي الاعراب بالنسبة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top