Значение типа содержимого заголовка по умолчанию, используемое в привязке WebHttpBinding - PullRequest
2 голосов
/ 14 октября 2011

Я пытаюсь отправить сообщение в службу REST, используя привязку WebHttpBinding по умолчанию.Служба принимает только «text / xml» в качестве типа содержимого, а WebHttpBinding отправляет «application / xml, charset-utf = 8».Есть ли способ изменить тип содержимого по умолчанию без использования HttpWebRequest?

1 Ответ

4 голосов
/ 14 октября 2011

Вы можете использовать WebOperationContext внутри области действия, чтобы изменить исходящий тип содержимого запросов, как показано ниже.

public class StackOverflow_7771645
{
    [ServiceContract]
    public interface ITest
    {
        [OperationContract]
        string Process();
    }
    public class Service : ITest
    {
        public string Process()
        {
            return "Request content type: " + WebOperationContext.Current.IncomingRequest.ContentType;
        }
    }
    public static void Test()
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
        WebServiceHost host = new WebServiceHost(typeof(Service), new Uri(baseAddress));
        host.Open();
        Console.WriteLine("Host opened");

        WebChannelFactory<ITest> factory = new WebChannelFactory<ITest>(new Uri(baseAddress));
        ITest proxy = factory.CreateChannel();
        using (new OperationContextScope((IContextChannel)proxy))
        {
            WebOperationContext.Current.OutgoingRequest.ContentType = "text/xml";
            Console.WriteLine(proxy.Process());
        }

        using (new OperationContextScope((IContextChannel)proxy))
        {
            WebOperationContext.Current.OutgoingRequest.ContentType = "application/xml";
            Console.WriteLine(proxy.Process());
        }

        ((IClientChannel)proxy).Close();
        factory.Close();

        Console.Write("Press ENTER to close the host");
        Console.ReadLine();
        host.Close();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...