Próbuję uzyskać mój plik svc działa pod IIS. W moim projekcie, gdy naciskałem klawisz F5, działał svc. Więc wiem, że wszystko jest w porządku, prawda? Z wyjątkiem IIS.WCF Jak włączyć metadane?
Pracuję na komputerze z systemem Windows XP Pro, aw usługach IIS dodałem katalog wirtualny.
Oto mój kod: IcarePlanActions (projekt: a)
namespace WcfServiceLibrary
{
[ServiceContract]
public interface ICarePlanActions
{
[OperationContract]
List<string> GetAllClients();
}
}
Klient: (projekt: a)
namespace WcfServiceLibrary
{
public class Client : ICarePlanActions
{
public List<string> GetAllClients()
{
List<string> clients = new List<string>();
clients.Add("Hendrik de Jong");
clients.Add("Miep de Berg");
clients.Add("Jaap Jongeneel");
clients.Add("Joop Prakman");
clients.Add("Pieter Schaakman");
return clients;
}
}
}
Web.config (projekt: B)
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="CarePlanService.Service1Behavior"
name="WcfServiceLibrary.Client">
<endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary.ICarePlanActions">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CarePlanService.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
CarePlan.svc
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary.Client" %>
Kiedy uruchomić tę usługę (co jest na IIS) z wfctestclient otrzymuję ten błąd
Error: Cannot obtain Metadata from http://localhost/CarePlanService/CarePlan.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.
Co robię źle?
ROZWIĄZANIE
nie miałem służby pracujące pod IIS. Najpierw ręcznie utworzyłem katalog wirtualny i wskazałem kierunek, w którym znajduje się svc. To nie zadziałało. Nie wiem dlaczego.
Potem poszedłem do Visual Studio i zmianie ustawienia serwera (prawy klawisz myszki na projekcie, właściwości, zakładka Web, kliknij Use local IIS Web Server
i kliknij Create Virtual Directory
. Kiedy to zrobił, to działało w ramach IIS z powyższym kodzie.
Edytowany tytuł - nie ma to nic wspólnego z językiem programowania C#. –
Nie użyłem WCF w ten sposób, ale czy należy wprowadzić implementację usługi wewnątrz datacontract? a jeśli tak, to nie ma datamember zdefiniowany w umowie. Dla mnie wygląda dziwnie. Ale nigdy nie byłem hostowany w IIS ... – magnus
@Martijn: naprawdę głupie pytanie: kiedy próbujesz się połączyć za pomocą WcfTestClient, czy strona internetowa jest w górze? Jeśli wprowadzisz zmiany proponowane tutaj (usuń [DataContract], użyj "mexHttpBinding" dla mexa końcowego), nie mam problemu z uzyskaniem metadanych w ogóle. Ale musisz najpierw zrobić "Widok w przeglądarce" na pliku * .svc, aby uruchomić wbudowany serwer WWW - a następnie możesz połączyć się z adresem URL za pomocą swojego WcfTestClient –