Конфигурация абсолютного минимума для УСПОКОИТЕЛЬНОГО WCF

Я нашел ответ! Мне пришлось превратить переменную responseEntity MutableLiveData в моем классе DataRepository в переменную класса и создать функцию, которая возвращает это, и теперь это работает!

Репозиторий:

public class DataRepository {

private APIService apiService;
private static DataRepository INSTANCE = null;
final MutableLiveData<ResponseEntity> responseEntity = new MutableLiveData<>();

public void loginUser(UserEntity userEntity){

    apiService.loginUser(userEntity)
            .enqueue(new Callback<ResponseEntity>() {
                @Override
                public void onResponse(Call<ResponseEntity> call, Response<ResponseEntity> response) {
                    Log.d(Constants.LOGGER, "from data repository " + response.body());
                    responseEntity.setValue(response.body());
                }

                @Override
                public void onFailure(Call<ResponseEntity> call, Throwable t) {
                    Log.d(Constants.LOGGER, "from data repository: there was an error");
                    responseEntity.setValue(null);
                }
            });
}
public MutableLiveData<ResponseEntity> getLiveResponses(){
        return responseEntity;
    }
}

Viewmodel:

public class LoginViewModel extends AndroidViewModel {      

public void sendLoginNetworkRequest(UserEntity userEntity){
    mRepository.loginUser(userEntity);
}

public MutableLiveData<ResponseEntity> getResponse(){
    return mRepository.getLiveResponse;
} 
}
6
задан I Bajwa 15 August 2014 в 22:24
поделиться

3 ответа

Я обнаружил, что можно добавить следующее к директиве ServiceHost в *.svc файле, и это автоматически установит WebHttpBinding и WebHttpBehavior для Вас:

Factory="System.ServiceModel.Activation.WebServiceHostFactory"

Обратите внимание, что пространство имен немного отличается от того, что упоминается в другом месте в сети (такой как в этой статье MSDN).

После выполнения этого я смог удалить весь раздел из web.config, и все все еще работало!

6
ответ дан 10 December 2019 в 02:56
поделиться

Удостоверьтесь, чтобы Вы использовали webHttpBinding на своей конечной точке (и не httpBinding или wsHttpBinding). Вот моя конфигурация конечной точки...

    <endpoint address="" binding="webHttpBinding" bindingConfiguration=""
      contract="WcfCore.ICustomer">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
2
ответ дан 10 December 2019 в 02:56
поделиться

Необходимо удостовериться, чтобы у Вас был адрес для Вашего сервисного хоста, например,

<services>
      <service name="SomeLib.SomeService">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/somebase"/>
          </baseAddresses>
        </host>
<!-- And one EndPoint **basicHttpBinding** WILL WORK !!! -->

        <endpoint 
                   address="basic"
                   binding="basicHttpBinding"
                   contract="SomeLib.SomeContract"/>
</service>
</services>

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

WebChannelFactory<IServiceContract> factory =
        new WebChannelFactory<IServiceContract>(
            new Uri("http://localhost:8080/somebase"));

Когда консольное приложение запустит, адрес будет доступен для просмотра, даже если сам разместил, и необходимо смочь вызвать действия на основе webget шаблонов uri.

Эта минимальная конфигурация позволит Вам вызвать WCF RestFULLY через самохостинг. Если бы Вы размещаете в IIS, он по существу работал бы, тот же путь, кроме svc файла заменяет наш пользовательский хост.

1
ответ дан 10 December 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: