Voici un exemple trivial censé renvoyer une chaîne "Hello World". Cependant, un navigateur affiche quelque chose comme SGVsbG8gV29ybGQ=
. Quel est le bon moyen de renvoyer un texte en clair à partir d'un service de style oldskul?Obtenir Gibberish au lieu de Hello World à partir d'un service avec webHttpBinding
s'il vous plaît savoir que:
Je ne peux pas retourner une chaîne: trois caractères Unicode seront automatiquement préfixés et le client HTTP héritage ne sera pas en mesure d'interopérer.
Je pourrais retourner un
Message
, mais je dois quand même garder la fonctionnalité d'analyse pour extraire la variabledata
. MélangeMessage
etint
types dans la même signature de la méthode n'est pas autorisé AFAIK.[ServiceContract(SessionMode=SessionMode.NotAllowed)] public interface IHello { [WebGet(UriTemplate = "manager?data={data}")] [OperationContract] Byte[] DoIt(int data); }
public class Hello : IHello { public Byte[] DoIt(int data) { return Encoding.ASCII.GetBytes("HelloWorld"); } }
UPDATE: It's not gibberish, but correctly encoded response. However, the format is not what I'd expect to receive. I've figured out (as gentlemen below suggest) that the ultimate control of the transport layer messaging format is gained with Message
classe. Cependant, si j'en utilise un, je perds la possibilité d'analyser la requête (attribut UriTemplate
). Par conséquent, il serait bon de savoir comment intégrer le Message
avec UriRequest
.
P.S. Si l'intégration "propre" n'est pas possible - quelle est la solution de contournement la plus élégante? Y a-t-il un code derrière le rideau métallique que je peux emprunter et utiliser dans ma mise en œuvre, s'il vous plaît?
Merci, alors quelle est la bonne façon de le faire, s'il vous plaît? Est-ce que je creuse la bonne direction? – BreakPhreak
J'ai également vérifié le résultat de ce que GetBytes() renvoie dans le débogueur.Le tableau d'octets est retourné et les valeurs semblent être correctes, comme arr [0] = 72 ('H'), arr [1] = 101 ('e') etc. Il semble que le cadre est mangling avec le résultats. – BreakPhreak
Le code hérité s'attend à recevoir une chaîne de texte brut/XML. Supposons que si "Hello World" est affiché dans le navigateur et que le type de contenu est "text/ascii", alors nous sommes sur la bonne voie. – BreakPhreak