2011-07-08 15 views
6

Mam usługę wcf. Próbowałem wygenerować kod serwera proxy i plik konfiguracyjny dla programu klienckiego przez svcutil:svcutil nie generuje pliku konfiguracyjnego

svcutil http://localhost/WcfService2/Files.svc 

mam ważny plik z serwera proxy, ale nie dostał plik konfiguracyjny. Czemu? (VS2010 SP1, .NET 4.0, IIS 7.0)

Moja umowa o świadczenie usług:

[ServiceContract] 
public interface IFiles 
{ 
    [OperationContract] 
    Guid UploadFile(Stream stream); 
} 

My Web config:

<?xml version="1.0"?> 
<configuration> 

    <system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding name="WebHttpBinding" maxBufferSize="65536" maxBufferPoolSize="524288" 
      maxReceivedMessageSize="1073741824" transferMode="Streamed" /> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="MyServiceBehavior" name="WcfService2.Files"> 
     <endpoint behaviorConfiguration="WebHttpBehavior" binding="webHttpBinding" 
      bindingConfiguration="WebHttpBinding" name="Files" contract="WcfService2.IFiles" /> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="WebHttpBehavior"> 
      <webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Json" 
      automaticFormatSelectionEnabled="false" /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="MyServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
    <system.web> 
    <httpRuntime maxRequestLength="100000" /> 
    </system.web> 

</configuration> 

Odpowiedz

8

punkty końcowe, które wykorzystują WebHttpBinding (aka, WCF punkty końcowe WebHttp) , nie eksponuj metadanych tak, jak robią to "normalne" (tj. SOAP) punkty końcowe. WCF nadal generuje WSDL dla Twojej usługi (ponieważ podałeś <serviceMetadata httpGetEnabled="true"/>), ale metadane będą zawierać tylko niektóre aspekty usługi (takie jak kontrakty danych itp.). Funkcje związane z Internetem (atrybuty WebInvoke/WebGet) nie będą dostępne na serwerze proxy, więc nawet jeśli otrzymasz plik proxy, najprawdopodobniej nie będziesz mógł go użyć do komunikacji z usługą (chyba, że ​​nie zrobiłeś tego ". t użyć któregokolwiek z tych). Problem polega na tym, że nie ma powszechnie akceptowanego formatu opisu metadanych dla usług REST (WADL jest prawdopodobnie najczęściej używany, ale nie jest tak powszechny jak WSDL dla SOAP i nie jest implementowany przez WCF).

W skrócie: svcutil tak naprawdę nie działa dla punktów końcowych sieci.

Jeśli chcesz długą wersję: http://blogs.msdn.com/b/carlosfigueira/archive/2012/03/26/mixing-add-service-reference-and-wcf-web-http-a-k-a-rest-endpoint-does-not-work.aspx

+0

To nieprawda. Próbowałem wykonać prosty projekt w domu (pod VS2008, .NET 3.5). Punkt końcowy usługi został skonfigurowany za pomocą elementu webHttpBinding i webHttp. Polecenie svcutil.exe http: // localhost: 3065/Service1.svc? Wsdl otrzymało zarówno proxy, jak i plik konfiguracyjny. – vpp

+0

Sprawdź powiązanie używane w pliku konfiguracyjnym - to nie będzie webHttpBinding. Prawdopodobnie trafiasz na jakiś domyślny punkt końcowy usługi. – carlosfigueira

+0

Usługa ma tylko jeden punkt końcowy. svcutil tworzy bazę dla klienta, który ma dostęp do punktu końcowego poprzez SOAP (messageVersion = "Soap12" textMessageEncoding customBinding). I jest to opisane w pliku konfiguracyjnym. Pierwsza próbka nie miała go wcale. – vpp

Powiązane problemy