Buduję WCF w języku C# i klienta do konsumpcji w tym samym czasie. Z jakiegoś powodu mam problem z uzyskaniem metody zwracania int. Oto mój kontrakt:WCF nie zwróci int
[ServiceContract]
public interface IMData
{
[OperationContract]
int ReturnAnInt();
[OperationContract]
String HelloWorld();
}
Oto gdzie wdrożyliśmy go:
public class MData : IMData
{
public String HelloWorld()
{
return "Hello World";
}
public int ReturnAnInt()
{
return 5;
}
}
Używam Visual Studio, a dla klienta, że importowany ten WCF jako odniesienie internetowej. Teraz z jakiegoś powodu, kiedy deklaruję wystąpienie MData i próbuję zadzwonić do HelloWorld, nie ma problemu, ale dostaję błąd kompilacji podczas wywoływania ReturnAnInt.
MData m = new MData();
String helloWorld = m.HelloWorld();
int result = m.ReturnAnInt();
Błąd pojawia się ReturnAnInt jest: „Nie przeciążenie dla metody«ReturnAnInt»zajmuje 0 argumenty” Więc mam myszkę aby zobaczyć, co Visual Studio spodziewa się, a ona mówi, że metoda powinna wyglądać jak:
void MData.ReturnAnInt(out int ReturnAnIntResult, out bool ReturnAnIntResultSpecified)
byłem walić głową w ścianę nad tym godzinami, a teraz nic nie można znaleźć w Google, i to moi współpracownicy zaskoczony, jak dobrze. Dlaczego dodano dwa parametry, których nie ma w definicji, i zmieniono typ zwrotu? Każda pomoc będzie wielce ceniona. Przepraszam, jeśli pominąłem wszelkie informacje, które byłyby pomocne.
Czy WCF naprawdę wspierać 'out' parametry? – abatishchev
Tak, ale to nie jest tak naprawdę pytanie. Problem opisany w pytaniu jest taki, że kod WCF C# nie określa parametrów 'out' ani opcjonalnych' int's, ale w ten sposób generuje go generator kodu Web References. To działa. Można jednak zdefiniować usługę WCF, taką jak 'int ReturnAnInt (out int otherInt) ;, która działa i może być dostępna zarówno jako odniesienie do usługi, jak i jako odniesienie w Internecie. Wygenerowany WSDL jest po prostu obiektem odpowiedzi z wieloma elementami, więc powinien generować także coś użytecznego w innych językach klienta. –
Dziękuję wszystkim za odpowiedzi, byli bardzo pomocni! Zaimportowałem go jako Service Reference i mój problem został rozwiązany :) –