Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az alapszintű felderítési minta bemutatja, hogyan lehet felderíthetővé tenni egy szolgáltatást, és hogyan kereshet és hívhat meg felderíthető szolgáltatást. Ez a minta két projektből áll: a szolgáltatásból és az ügyfélből.
Megjegyzés:
Ez a minta kódban implementálja a felderítést. A konfigurációban a felderítést megvalósító mintát a Konfiguráció című témakörben talál.
Szolgáltatás
Ez egy egyszerű számológép szolgáltatás implementálása. A felderítési kód megtalálható Main -ban, ahol egy ServiceDiscoveryBehavior hozzá van adva a szolgáltatás gazdagépéhez, és hozzáadnak egy UdpDiscoveryEndpoint-t a következő kódban látható módon.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new
WSHttpBinding(), String.Empty);
// Make the service discoverable over UDP multicast
serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());
serviceHost.Open();
// ...
}
Ügyfél
Az ügyfél egy DynamicEndpoint eszközt használ a szolgáltatás megkereséséhez. A DynamicEndpointstandard végpont feloldja a szolgáltatás végpontját az ügyfél megnyitásakor. Ebben az esetben a DynamicEndpoint a szolgáltatási szerződés alapján keresi meg a szolgáltatást. A DynamicEndpoint alapértelmezés szerint egy UdpDiscoveryEndpoint-en végzi a keresést. Miután megtalálta a szolgáltatásvégpontot, az ügyfél a megadott kötésen keresztül csatlakozik a szolgáltatáshoz.
public static void Main()
{
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
// ...
}
Az ügyfél meghatároz egy metódust InvokeCalculatorService , amely az osztályt használja a DiscoveryClient szolgáltatások kereséséhez. A DynamicEndpoint a ServiceEndpoint-ből örököl, így átadható a InvokeCalculatorService metódusnak. A példa ezután a DynamicEndpoint használja egy CalculatorServiceClient példány létrehozására, és meghívja a kalkulátor szolgáltatás különféle műveleteit.
static void InvokeCalculatorService(ServiceEndpoint serviceEndpoint)
{
// Create a client
CalculatorServiceClient client = new CalculatorServiceClient(serviceEndpoint);
Console.WriteLine("Invoking CalculatorService");
Console.WriteLine();
double value1 = 100.00D;
double value2 = 15.99D;
// Call the Add service operation.
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
// Call the Divide service operation.
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
Console.WriteLine();
//Closing the client gracefully closes the connection and cleans up resources
client.Close();
}
A minta használata
Ez a minta HTTP-végpontokat használ, és a minta futtatásához hozzá kell adni a megfelelő URL-hozzáférés-vezérlési listákat. További információ: HTTP és HTTPS konfigurálása. Ha a következő parancsot emelt szintű jogosultsággal hajtja végre, hozzá kell adnia a megfelelő ACL-eket. Ha a parancs nem működik, érdemes lehet a Domain és a felhasználónév helyett a következő argumentumokat használni.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%A Visual Studio használatával nyissa meg a Basic.sln, és hozza létre a mintát.
Futtassa a service.exe alkalmazást.
A szolgáltatás elindítása után futtassa a client.exe.
Figyelje meg, hogy az ügyfél a cím ismerete nélkül tudta megtalálni a szolgáltatást.