Vra

Ek is net om in die skep van 'n paar WCF dienste, maar ek het 'n vereiste vir hulle backwards compatible vir nalatenskap (NET 1.1 en 2.0) kliënt aansoeke om te maak.

Ek het daarin geslaag om te kry om die dienste te korrek uit te voer vir 3.0 en groter kliënte, maar toe ek publiseer die dienste gebruik te maak van 'n basicHttpBinding eindpunt (wat ek glo is wat nodig is vir die verenigbaarheid ek nodig het), die diens refactors my metode handtekeninge. Bv.

public bool MethodToReturnTrue(string seedValue);

verskyn aan die kliënt programme soos

public void MethodToReturnTrue(string seedValue, out bool result, out bool MethodToReturnTrueResultSpecified);

Ek het probeer om elke opset parameter wat ek kan dink in die app.config vir my self-hosting konsole app, maar ek kan nie lyk om hierdie funksie te maak as wat verwag is. Ek veronderstel dit kan lei tot die feit dat my verwagtinge is gebrekkig, maar ek sal verbaas dat 'n BWF diens is nie in staat is om die hantering van 'n Bool terugkeer tipe na 'n down-vlak kliënt wees.

My huidige app.config lyk soos volg.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>  
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="MyServiceTypeBehaviors" Name="MyCompany.Services.CentreService.CentreService">
        <clear />
        <endpoint address="http://localhost:8080/CSMEX"    binding="basicHttpBinding" bindingConfiguration="" contract="IMetadataExchange" />
        <endpoint address="http://localhost:8080/CentreService" binding="basicHttpBinding" bindingName="Compatible" name="basicEndpoint" contract="MyCompany.Services.CentreService.ICentreService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors" >
            <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Kan iemand raai, asseblief?

Was dit nuttig?

Oplossing 2

OK, ons nodig het om hierdie kwessie in die kort termyn op te los, en so het ons vorendag gekom met die idee van 'n "interop", of verenigbaarheid laag.

Baiscally, al wat ons gedoen het, was 'n tradisionele ASMX web diens by die projek, en roep die BWF diens van dat die gebruik van inheemse WCF noem. Ons was dan in staat wees om die toepaslike tipes terug na die kliënt aansoeke terug te keer sonder 'n beduidende bedrag van re-factoring werk. Ek weet dit was 'n mag nou wel oplossing, maar dit was die beste opsie wat ons gehad het met so 'n groot nalatenskap kode-basis. En die ekstra bonus is dat dit eintlik werk verbasend goed. :)

Ander wenke

Ag, hierdie is my dood! Ek het dit by die werk oor 3 maande gelede, en nou kan ek nie onthou al die besonderhede.

Ek onthou egter dat jy basicHttpBinding nodig, en jy kan nie gebruik maak van die nuwe serializer (wat is die standaard); jy moet die "ou" XmlSerializer gebruik.

Ongelukkig het ek nie werk nie op die plek waar ek dit gedoen het nie, so ek kan nie gaan kyk na die kode. Ek sal my baas bel en kyk wat ek kan grawe.

Jy het nie die XmlSerializer gebruik. Byvoorbeeld:

[ServiceContract(Namespace="CentreServiceNamespace")]
[XmlSerializerFormat(Style=OperationFormatStyle.Document, SupportFaults=true, Use=OperationFormatUse.Literal)]
public interface ICentreService {
    [OperationContract(Action="CentreServiceNamespace/MethodToReturnTrue")]
    bool MethodToReturnTrue(string seedValue);
}

Jy het met die hand te sit die operasie aksie naam omdat die outomaties gegenereerde WCF naam anders is opgebou uit die naam ASMX aksie (BWF sluit die naam koppelvlak asook, ASMX nie).

Enige data kontrakte wat jy gebruik moet word versier met [XmlType] eerder as [DataContract].

Jou konfigurasie lêer moet nie nodig het om te verander.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top