Как загрузить файл с устройства Android на спокойный сервис wcf? - PullRequest
1 голос
/ 18 февраля 2011

Я создаю приложение для Android, и мне нужно загрузить фотографию, сделанную камерой. Мне нужно загрузить его в спокойный сервис WCF. Я посмотрел на многие учебные пособия, но я просто не могу заставить его работать. Я думаю, что моя проблема связана со службой WCF. Я не получаю никаких исключений, но я получаю ответ 400 BAD REQUEST. Поскольку служба WCF в настоящее время работает на моем локальном хосте, я использую 10.0.2.2 для доступа к ней из эмулятора Android. Я могу вызывать другие методы обслуживания на локальном сервисе, но этот не удается.

Java

HttpPost httppost = new HttpPost("http://10.0.2.2:53943/ImageService/UploadInspectionPhoto");
File photo = new File(Environment.getExternalStorageDirectory(), "01.jpg");
MultipartEntity t = new MultipartEntity();
t.addPart("t", new FileBody(photo));
//t.addPart(new FormBodyPart("t", new FileBody(photo))); I tired this too
httppost.setEntity(t);
HttpResponse response = httpclient.execute(httppost);

WCF

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class ImageService
{
        [WebInvoke(Method = "POST")]
        public void UploadInspectionPhoto(Stream t)
        {
            // I put a breakpoint here but it never gets here
            // Do something with the stream
        }
}

Файл конфигурации

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
      <customErrors mode="Off"></customErrors>
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
  </system.webServer>

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
      <bindings>
          <!--<basicHttpBinding>
              <binding name="BasicHttpStreaming" transferMode="Streamed">
              </binding>
          </basicHttpBinding>-->
          <webHttpBinding>
              <binding name="WebHttpDtreaming" transferMode="Streamed" >
              </binding>
          </webHttpBinding>
      </bindings>
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
      </webHttpEndpoint>
    </standardEndpoints>
      <services>
          <service behaviorConfiguration="PublishMetadataBehavior" name="SystemDesign.Collaborate.Services.ImageService">
              <endpoint address="soap" binding="basicHttpBinding" name="soap" contract="SystemDesign.Collaborate.Services.ImageService"/>
              <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange" />
          </service>
      </services>
      <behaviors>
          <serviceBehaviors>
              <behavior name="PublishMetadataBehavior">
                  <serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>
              </behavior>
          </serviceBehaviors>
      </behaviors>
  </system.serviceModel>

</configuration>

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2012

Для всех, кто сталкивался с этим, как я только что сделал, оказалось, что мне нужно обновить maxReceivedMessageSize для моей службы WCF. Этот вопрос помог: WCF REST service 400 Неправильный запрос

0 голосов
/ 17 апреля 2011

Является ли использование для вас необработанной модели программирования WebHttpBinding на стороне сервиса? См. эти два сообщения в блоге для получения подробных пошаговых инструкций о том, как их осуществить.

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