Я нашел ответ! Мне пришлось превратить переменную 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;
}
}
Я обнаружил, что можно добавить следующее к директиве ServiceHost в *.svc файле, и это автоматически установит WebHttpBinding и WebHttpBehavior для Вас:
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
Обратите внимание, что пространство имен немного отличается от того, что упоминается в другом месте в сети (такой как в этой статье MSDN).
После выполнения этого я смог удалить весь раздел из web.config, и все все еще работало!
Удостоверьтесь, чтобы Вы использовали webHttpBinding на своей конечной точке (и не httpBinding или wsHttpBinding). Вот моя конфигурация конечной точки...
<endpoint address="" binding="webHttpBinding" bindingConfiguration=""
contract="WcfCore.ICustomer">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
Необходимо удостовериться, чтобы у Вас был адрес для Вашего сервисного хоста, например,
<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 файла заменяет наш пользовательский хост.