zu konvertieren Ich habe den folgenden Code in VB.Net. Es kompiliert und funktioniert wie gewünscht.Versuchen, diesen VB.Net ThreadStart WCF-Code in C#
In meinen Bemühungen, zu C# zu wechseln, versuche ich jedes Mal, wenn ich an einem neuen Projekt arbeite, C# zu verwenden, aber in diesem Fall fehlt mir eindeutig etwas.
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
Das gleiche in C# aus einem dieser VB zu C# Konversionsflächen sagt der folgende funktionieren sollte:
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;
}
Das Problem ist, dass der Compiler beschwert sich über: Thema Serverprozesses = new Thread (neu EventHandler (WebService));
„Keine Überlast für WebService Spiele Eventhandler delegieren“
Was mache ich falsch? Was sollte der C# -Code sein?
Entschuldigung für was sollte eine einfache Frage sein, aber ich habe immer mit Delegierten gekämpft.
--EDIT--
Dank Markus, das ist, was ich habe jetzt:
public Thread Start(string AddressToConnect)
{
Thread ServerProcess = new Thread(WebService);
ServerProcess.Start(AddressToConnect);
return ServerProcess;
}
Und die WebService-Methode ist jetzt:
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
...
Würde dies das Äquivalent sein? \t \t öffentliche Aufgabe Start (String AddressToConnect) \t { \t \t Task t = new Aufgabe (() => \t \t { \t \t \t WebService (AddressToConnect); \t \t}); \t \t t.Start(); \t \t zurück t; \t} –
'neuer Thread (WebService (AddressToConnect)); 'versuche das ... Dann starte 'ServerProcess.Start();' ... – Codexer
@Codexer: Ich habe versucht Thread t = new Thread (WebServiceAddressToConnect)); t.Start(); return t; und das kompiliert nicht –