Próbuję wysłać niektóre dane JSON do usługi, którą utworzyłem wC# i wcf. W Skrzypek moje żądanie POST jest następującyBłąd 415 podczas wysyłania danych JSON do usługi WCF
Skrzypek:
Request Header
User-Agent: Fiddler
Host: localhost
Content-Length: 29
Content-Type: application/json; charset=utf-8
Request Body
{sn:"2705", modelCode:1702 }
Poniżej interfejs usługi. Że używa atrybutu WebInvoke zarządzać żądanie POST
[ServiceContract]
public interface IProjectorService
{
[WebInvoke(Method="POST", UriTemplate="projectors", RequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json)]
[OperationContract]
void RecordBreakdown(Record record);
}
Realizacja interfejsu serwisowego odbywa zmienne przekazywane do argumentu i używa ADO wysłać te dane do db SQL.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public partial class ProjectorService : IProjectorService
{
public void RecordBreakdown(Record record)
{
//ado code to send data to db (ie do record.SerialNumber...
}
}
POCO obiektu do reprezentowania wielu parametrów
[DataContract]
public class Record
{
[DataMember]
public string SerialNumber { get; set; }
[DataMember]
public int ModelCode { get; set; }
}
.svc plik
<%@ ServiceHost Language="C#" Debug="true" Service="ProjectorService" CodeBehind="~/App_Code/ProjectorService.cs" %>
Web.config:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
W Skrzypek, po kliknięciu na " wykonaj ", pojawia się błąd 415" nieobsługiwany nośnik ty pe ". Moja obecna linia myślenia polega na tym, że w mojej klasie usług projektora, może powinienem stworzyć obiekt odpowiedzi i odesłać kod 200?
To zadziałało. Myślałem, że powiązanie sieci zostało wygenerowane automatycznie przy użyciu metody fabrycznej w pliku svc (które i tak nie zawierałem). Oprócz tych zmian potrzebowałem dodać "BodyStyle = WebMessageBodyStyle.Bare" do metody usługi, ponieważ dane JSON nie były zapakowane w inny obiekt. – beaumondo