Sergey Alexandrovich Kryukov
Если вам удалось разработать автономную функциональность WCF, то на самом деле ничего не изменится, если вы хотите, чтобы служебная часть была System.Windows.Forms
приложение. WCF не имел бы никакого значения, если бы он был переплетен с определенными типами пользовательского интерфейса и чем-либо еще, не связанным с коммуникационными технологиями.
С вашим контрактом на обслуживание это выглядит так, как будто вы хотите показать строку, предоставленную клиентом в RichTextBox
который находится на стороне обслуживания.
Просто повторно внедрите свой контрактный метод.
Например, предположим, что у вас есть форма:
using System.Windows.Forms;
//...
public partial class MyForm : Form {
RichTextBox MyRichTextBox = new RichTextBox();
//...
}
Реализуйте свой сервисный интерфейс в этой форме. Например, добавьте отдельный файл с другой частью частичного объявления:
public partial class MyForm : IHelloService {
void IHelloService.SayHello(string msg) {
MyRichTextBox.Text = msg;
//or better:
//MyRichTextBox.Rtf = msg; //and pass formatted RTF text
}
}
Обратите внимание: вам не нужно повторять ": Form" и ": IHelloService" в списках наследования обоих частичных объявлений классов — это не нужно, что очень удобно. Кроме того, я сделал реализацию интерфейса непубличной, используя явный синтаксис реализации (где любой модификатор доступа не разрешен). Этот синтаксис намного лучше, так как никто не может вызвать метод
IHelloService.SayHello
случайно.
—СА
XeeShaN AbbAs
Спасибо за вашу помощь я реализовал свой код как вы сказали теперь мой код выглядит так
<pre lang="c#">
[ServiceContract]
публичный интерфейс IHelloService
{
[OperationContract]
строка SayHello(строка msg);
}
пространство имен HelloWcfServiceHost
{
публичный частичный класс Form1 : IHelloService
{
строка IHelloService.SayHello(строка msg)
{
richtextbox1 отображение.Текст = сообщение;
вернуть сообщение;
}
}
общественности частичного класс form1 : форма
{
открытый form1()
{
метод InitializeComponent();
}
частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{
используя (метод servicehost узел = новый метод servicehost(typeof на(файл form1)))
{
хозяин.AddServiceEndpoint(typeof(IHelloService), new NetTcpBinding(), "net.tcp://localhost:9000/HelloWcfServiceHost");
хозяин.Открыть();
}
}
}
}
</pre>
это работает успешно, но теперь мой клиент wcf не работает через исключение того, что хост не работает.
мой код на стороне клиента таков
<pre lang="c#">
IHelloService proxy = ChannelFactory<ihelloservice>.Класса createchannel(новые привязки nettcpbinding(), новый адрес endpointaddress("чистые.протокол TCP://имя localhost:9000/HelloWcfServiceHost"));
строковое сообщение;
msg = прокси.Метод sayHello(текстовое поле textbox1.Текст);
</pre>
Sergey Alexandrovich Kryukov
Вам лучше добавить этот код, используя "улучшить вопрос", чтобы вы могли сохранить форматирование, которое вы не могли сделать в комментарии; во всех случаях не помещайте его в решение.
Вы не задаете следующий вопрос, поэтому вам может не понадобиться показывать этот код.
Если вы считаете, что мой ответ каким-то образом полезен, пожалуйста, формально примите его (зеленая кнопка).
Если это все еще проблема, не стесняйтесь задавать следующий вопрос.
--СА