Так что я застрял в этой точке.Я пытаюсь связаться с сервисом JanRain "auth_info".Фактически, для начала я просто пытаюсь получить сообщение об ошибке / объект / '. Jsthingy', которое вы получаете, когда просматриваете его прямо в браузере:
https://rpxnow.com/api/v2/auth_info
но я хочу получить это обратно с помощью вызова WCF.
Согласно Fiddler, тип содержимого информации по этому URL-адресу - text / javascript .Однако, насколько я могу судить, WCF не дает мне такой возможности при вызове через WCF.Я получаю два варианта: WebMessageFormat.Json
или WebMessageFormat.Xml
.
В Visual Studio возникает следующая ошибка:
Исключительная ситуация InvalidOperationException не обрабатывается кодом пользователя - входящее сообщение имеетнеожиданный формат сообщения «Raw».Ожидаемые форматы сообщений для операции: «Xml», «Json».Это может быть потому, что в привязке не настроен WebContentTypeMapper.См. Документацию WebContentTypeMapper для получения более подробной информации.
WTF?Так может ли WCF сделать это?(Я подозреваю, что еще более ручное решение впереди)
Примерам онлайнового кода JanRain немного не хватает в примерах C #.
Их ссылка на документацию по auth_info здесь https://rpxnow.com/docs#auth_info
Адрес их службы auth_info здесь:
https://rpxnow.com/api/v2/auth_info
[TestMethod]
public void CallJanRain()
{
var x = new JanRainProxy("https://rpxnow.com/api/v2");
x.GetAuthInfo("", ""); //the params are apiKey, and token. not passing either at the moment as I want to be able to know how to at least handle the error first. After all, the *browser* at least got it..
}
[ServiceContract]
public interface IJanRainContract
{
[OperationContract(Name="auth_info")]
[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Xml)]
JanRainAuthInfo GetAuthInfo(string apiKey, string token);
}
[DataContract]
public class JanRainAuthInfo
{
[DataMember(Name="identifier")]
public string Identifier { get; set; }
}
public class JanRainProxy: ClientBase<IJanRainContract>
{
public JanRainProxy(string url, WebHttpSecurityMode securityMode = WebHttpSecurityMode.Transport)
: base(ConstructEndpoint(url, securityMode))
{
}
//JanRainContract
public JanRainAuthInfo GetAuthInfo(string apiKey, string token)
{
return base.Channel.GetAuthInfo(apiKey, token);
}
// This method constructs a WebHttpBinding endpoint with all the appropriate
// settings for talking to our services.
private static ServiceEndpoint ConstructEndpoint(string serviceUri, WebHttpSecurityMode securityMode)
{
var contract = ContractDescription.GetContract(typeof(IJanRainContract));
var binding = new WebHttpBinding(securityMode);
//{
// MaxBufferPoolSize = 524288000,
// MaxReceivedMessageSize = 65536000
//};
var address = new EndpointAddress(serviceUri);
var endpoint = new ServiceEndpoint(
contract,
binding,
address);
var webHttpBehavior = new WebHttpBehavior()
{
DefaultBodyStyle = WebMessageBodyStyle.Wrapped,
DefaultOutgoingRequestFormat = WebMessageFormat.Json,
DefaultOutgoingResponseFormat = WebMessageFormat.Json,
AutomaticFormatSelectionEnabled = true,
FaultExceptionEnabled = true
};
endpoint.Behaviors.Add(webHttpBehavior);
return endpoint;
}
}
Я полагаю, что, возможно, мне следует оставить тип контента на json и настроить поведение или привязку.