【发布时间】:2017-12-09 05:29:55
【问题描述】:
我在 VB.Net 中有以下代码。它可以根据需要编译和工作。
在我努力转向 C# 的过程中,每当我从事一个新项目时,我都会努力使用 C#,但是在这种情况下,我显然遗漏了一些东西。
Private m_Service As ServiceHost = Nothing
Public Function Start(ByVal AddressToConnect As String) As Thread
Dim ServerProcess As New Thread(AddressOf WebService)
ServerProcess.Start(AddressToConnect)
Return ServerProcess
End Function
Private Sub WebService(ByVal AddressToListen As String) ' Address should be in the form: "http://localhost:8000/IHello"
' Define where to listen
Dim Address As Uri = New Uri(AddressToListen)
' Define how to exchange messages
Dim Binding As BasicHttpBinding = New BasicHttpBinding()
' When the connection is established, define what object is created
m_Service = New ServiceHost(GetType(Worker), Address)
' Add an endpoint, passing the address, binding and contract
m_Service.AddServiceEndpoint(GetType([Interface].IContract), Binding, Address)
' YOU MUST PERFORM THE FOLLOWING BEFORE YOU ATTEMPT TO OPEN THE CONNECTION
' netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
' Begin listening for connections
m_Service.Open()
Console.WriteLine("WCF Service started")
End Sub
Public Sub [Stop]()
m_Service.Close()
m_Service = Nothing
End Sub
从这些 VB 到 C# 转换站点之一的 C# 中的相同内容表明以下内容应该有效:
private ServiceHost _Service = null;
public Thread Start(string AddressToConnect)
{
Thread ServerProcess = new Thread(new EventHandler(WebService));
ServerProcess.Start(AddressToConnect);
return ServerProcess;
}
private void WebService(string AddressToListen)
{
// Address should be in the form: "http://localhost:8000/IHello"
// Define where to listen
Uri Address = new Uri(AddressToListen);
// Define how to exchange messages
BasicHttpBinding Binding = new BasicHttpBinding();
// When the connection is established, define what object is created
_Service = new ServiceHost(typeof(Worker), Address);
// Add an endpoint, passing the address, binding and contract
_Service.AddServiceEndpoint(typeof(Interface.IContract), Binding, Address);
// YOU MUST PERFORM THE FOLLOWING BEFORE YOU ATTEMPT TO OPEN THE CONNECTION
// netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
// Begin listening for connections
_Service.Open();
Console.WriteLine("WCF Service started");
}
public void Stop()
{
_Service.Close();
_Service = null;
}
问题是编译器抱怨: Thread ServerProcess = new Thread(new EventHandler(WebService));
“WebService 没有重载匹配委托 EventHandler”
我做错了什么? C# 代码应该是什么?
抱歉,这应该是一个简单的问题,但我一直在与代表作斗争。
--编辑--
感谢 Markus,这就是我现在所拥有的:
public Thread Start(string AddressToConnect)
{
Thread ServerProcess = new Thread(WebService);
ServerProcess.Start(AddressToConnect);
return ServerProcess;
}
WebService 方法现在是:
private void WebService(object AddressToListen)
{
// Address should be in the form: "http://localhost:8000/IHello"
// Define where to listen
Uri Address = new Uri((string)AddressToListen);
// Define how to exchange messages
...
【问题讨论】:
-
这是等价的吗?公共任务开始(字符串地址连接){任务t =新任务(()=>{Web服务(地址连接);}); t.Start();返回 t; }
-
new Thread(WebService(AddressToConnect));试试那个...然后启动它ServerProcess.Start();... -
@Codexer: 我试过 Thread t = new Thread(WebServiceAddressToConnect));t.Start();return t;这不会编译
-
我的 typeo
new Thread(WebService);然后ServerProcess.Start(AddressToConnect);... 另外,您发布的代码不是我发布的...