Во-первых, вы не должны вызывать Directory.GetCurrentDirectory () и объединять с именем файла. Служба работает на веб-сервере, таком как IIS или контейнер другого типа, поэтому GetCurrentDirectory не даст вам того, о чем вы думаете, как вы узнали. (Для быстрого касания, в качестве рекомендации в будущем, если вы хотите объединить пути, вы должны использовать метод Path.Combine, поскольку он будет обрабатывать все угловые случаи и быть кроссплатформенным.)
Есть несколько способов сделать это:
Assembly myAssembly = Assembly.GetAssembly(SomeTypeInAssm.GetType());
string fullFileName = Path.Combine(myAssembly.Location, "MyFile.txt");
fullFileName должно быть тем, что вы ищете. Убедитесь, что вы используете тип, который на самом деле находится в сборке, расположенной и на которую ссылается рассматриваемый каталог. Однако имейте в виду, что этот файл в вашем вопросе в области Program Files является безопасной областью в Vista и более поздних ОС, и вы можете не иметь доступа ни к чему, кроме чтения файла.
Также у вас может быть установщик приложения, поместите в реестр путь установки. Тогда ваша служба, если на том же ящике может получить эту информацию.
Также вы можете убедиться, что файл, который вы хотите загрузить, находится в среде веб-сервера, доступной для рассматриваемой службы WCF.